Пропустить части ввода в boost :: spirit :: qi, если вызов функции возвращается - PullRequest
2 голосов
/ 20 декабря 2011

В последнее время я играю с boost :: spirit :: qi и пытаюсь написать свой собственный (очень, очень простой) язык сценариев, который он будет анализировать. У меня были проблемы, когда я добрался до операторов if в сценарии. Мне нужен парсер, чтобы пропустить части ввода, если вызов функции возвращается true.

Например, у меня есть токен, определенный как принимающий имена переменных (a-zA-Z_) и набор сравнения, чтобы принять ">" или "<". Пример кода ниже. </p>

comparison_statement = token >> comparison >> token;
statement            = lit("if ") >> comparison_statement[&compare] >> "then";

qi::phrase_parse(first, last, script, space);  // This call the parser

Как бы я пропустил следующий раздел, если функция сравнения вернулась?

1 Ответ

3 голосов
/ 20 декабря 2011

Условное в синтаксическом анализаторе может быть записано с помощью Epsilon Parser . Это вызовет функцию, которую вы ей передаете, и если эта функция вернет false, эта проверка не пройдёт и перейдет к следующему или.

Например:

qi::rule<Iterator, std::string(), ascii::space_type> rool;
rool = a | b | eps(f) | d
...