Я использую синтаксический анализатор, сгенерированный ANTLR, в моей программе на C ++, и я хочу использовать свой вспомогательный класс в синтаксическом анализаторе, чтобы написать что-то вроде следующего:
constant_declaration
: 'const' type_specifier ID ('[' constant_expression ']')? '=' initializer
{
parserHelper->addConstant($type_specifier.text, $ID.text);
}
;
Где parserHelper - мой вспомогательный объект C ++.Но я застрял с передачей этого помощника парсеру Си.В объектно-ориентированных языках проще всего использовать базовый класс синтаксического анализатора.Это невозможно в C. Единственное решение, к которому я пришел сейчас, - это определить глобальную переменную в секции @members и инициализировать ее перед синтаксическим анализом:
@members
{
ParserHelper* parserHelper;
}
По некоторым причинам это неудобно для меня.Разве нет способа поместить эту переменную в структуру синтаксического анализатора C, созданную ANTLR?