Я изо всех сил пытаюсь написать синтаксический анализатор идентификаторов, который анализирует буквенную строку, которая не является ключевым словом. ключевые слова все в таблице:
struct keywords_t : x3::symbols<x3::unused_type> {
keywords_t() {
add("for", x3::unused)
("in", x3::unused)
("while", x3::unused);
}
} const keywords;
и парсер для идентификатора должен быть таким:
auto const identifier_def =
x3::lexeme[
(x3::alpha | '_') >> *(x3::alnum | '_')
];
теперь я пытаюсь объединить их, чтобы синтаксический анализатор идентификаторов не справлялся с анализом ключевого слова. Я пробовал это так:
auto const identifier_def =
x3::lexeme[
(x3::alpha | '_') >> *(x3::alnum | '_')
]-keywords;
и это:
auto const identifier_def =
x3::lexeme[
(x3::alpha | '_') >> *(x3::alnum | '_') - keywords
];
он работает с большинством входных данных, но если строка начинается с ключевого слова вроде int, whilefoo, forbar
, синтаксический анализатор не может проанализировать эти строки. как я могу получить этот парсер правильно?
operator -
, но она совсем другая. Существует соответствующее обсуждение здесь. - person Tomilov Anatoliy   schedule 26.06.2016