У меня есть язык, который я делаю парсер, для которого содержатся вызовы функций.Несколько имен функций зарезервированы, и я хотел бы обрабатывать их по-другому в моем грамматике.В EBNF это выглядело бы как
FunctionCall ::= FunctionName '(' ')'
SpecialFunctionCall :: SpecialName '(' ')'
FunctionName ::= VariableName - SpecialFunctionName
SpecialFunctionName ::= "special_function_a" | "special_function_b"
Моя проблема заключается в переводе оператора исключение из EBNF в flex.
FunctionName {Letter}{LetterOrDigit}
Isсупер набор SpecialFunctionName , который является жестко запрограммированной строкой
SpecialFunctionName "special_function_a" | "special_function_b"
Поэтому я получаю предупреждение от бизона о том, что SpecialFunction никогда не будет сопоставлено.Стоит ли объединять токены и сравнивать строки в синтаксическом анализаторе, или есть рекомендуемый способ устранить эту неоднозначность в flex?