Как получить доступ к узлам в Decaf Antrl4 - PullRequest
0 голосов
/ 20 апреля 2020

Я создаю семанти c правил для языка программирования Decaf, написанного на Antrl4. Реализуемое мной правило semanti c гласит, что метод main в программе не должен принимать параметры.

Это программа, которую я тестирую с деревом синтаксического анализатора:

 class Program {
 void main( int a) {
 int x;
 boolean x; // identifier declared twice
   } 
}

Program parser tree

Так что я там делаю осуществляет доступ к узлам и получает необходимые данные для каждой из перечисленных ниже переменных, чтобы создать 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>]

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я очень ценю вашу помощь.

...