Я создаю семанти c правил для языка программирования Decaf, написанного на Antrl4. Реализуемое мной правило semanti c гласит, что метод main в программе не должен принимать параметры.
Это программа, которую я тестирую с деревом синтаксического анализатора:
class Program {
void main( int a) {
int x;
boolean x; // identifier declared twice
}
}
Так что я там делаю осуществляет доступ к узлам и получает необходимые данные для каждой из перечисленных ниже переменных, чтобы создать SymbolTable
и добавить его после. Я получаю сообщение об ошибке при попытке получить return_type
программы, которая должна быть int , boolean
. Тем не менее, я обнаружил, что, когда я помещаю нулевые значения индекса в var_decl ,data_type
, я получаю int
, но я действительно хочу получить все доступные data_type
, а не только те, которые я делал вручную. Без значений индекса это ошибка, которую я получаю:
return_type = ctx.block().var_decl().data_type().getText() AttributeError: 'list' object has no attribute 'data_type'
А также arguments
предназначен для получения аргументов в пределах main()
в случае, если они есть, но я не похоже, что я тоже получаю к нему доступ правильно, так как я получаю это сообщение, когда запускаю его: [<antlr4.tree.Tree.TerminalNodeImpl object at 0x7f0c24845630>, <antlr4.tree.Tree.TerminalNodeImpl object at 0x7f0c24982860>]
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я очень ценю вашу помощь.