Как я могу отслеживать свою позицию ввода с несколькими входами, используя Boost :: Spirit :: Qi? - PullRequest
3 голосов
/ 30 июня 2010

Я бы хотел поддержать что-то вроде механизма C ++ #include в парсере буст-спирита.По сути, у меня есть команда сценария, которая просит мой синтаксический анализатор загрузить вспомогательный сценарий из файла.Я хотел бы иметь возможность сообщать об ошибках, как описано в позиции ввода отслеживания при синтаксическом анализе сообщения , но они не охватывают анализ нескольких входных данных.

Может ли это быть разумно выполненоиспользуя boost::spirit::qi?

Я работал над получением различных входных данных при использовании более умного типа итератора.Я все еще хотел бы видеть точное позиционирование, хотя.

1 Ответ

1 голос
/ 02 июля 2010

ИМХО, использование умного итератора - путь. Что нужно сделать, это иметь стек входных контекстов, поддерживаемых итератором. Каждый входной контекст хранит информацию, относящуюся к конкретному файлу.

Всякий раз, когда необходимо прочитать новый файл (т.е. после просмотра оператора #include), создается новый входной контекст. Текущий входной контекст помещается в стек, в то время как новый контекст становится активным. В EOF вы извлекаете следующий входной контекст из стека, возвращаясь к точке сразу после #include. Если стек пуст, вы достигли EOF основного файла.

В любом случае, итератор получает данные только от активного входного контекста.

...