Контекстно-свободная грамматика для VBA

Я пытаюсь сканировать и анализировать код VBA (visual basic for application) для школьного задания.

Я использую модули Python PLY lex и yacc. Прямо сейчас я просто пытаюсь заставить объявление и присваивание переменных работать как доказательство концепции. Моя предварительная грамматика понимает объявление переменной ИЛИ присваивание. Как только я помещаю туда символ новой строки (\n) и добавляю еще один оператор, он ничего не понимает. то есть: в коде в сути, если вы удалите «a = 3» из строки в строке 92, он будет работать нормально и вставит идентификатор в список идентификаторов.

Я обрабатываю символы новой строки в сканере, поэтому я думаю, что что-то не так с моим определением грамматики, но не могу понять.

Грамматика в основном такова:

statement : declaration
          | assignment

declaration : DIM IDENTIFIER AS TYPE

assignment : IDENTIFIER ASSIGN BOOLEAN
           | IDENTIFIER ASSIGN DOUBLE
           | IDENTIFIER ASSIGN INT

Обратите внимание, что идентификаторы IDENTIFIER, ASSIGN, BOOLEAN, DOUBLE, INT DIM, AS и TYPE определены в модуле lex.

Я создал суть с кодом, который находится по адресу: https://gist.github.com/clsk/22c386695dd1ddb7ca75


person Alan Alvarez    schedule 13.02.2014    source источник
comment
Это грамматика для одного утверждения. Почему вы ожидаете, что он будет работать с несколькими операторами? Нигде нет продукции, указывающей, что несколько утверждений являются допустимыми входными данными.   -  person rici    schedule 13.02.2014
comment
Действительно, это было проблемой. Спасибо за указатель   -  person Alan Alvarez    schedule 14.02.2014


Ответы (1)


@rici написал:

Это грамматика для одного утверждения. Почему вы ожидаете, что он будет работать с несколькими операторами? Нигде нет продукции, указывающей, что несколько утверждений являются допустимыми входными данными.

ОП написал:

Действительно, это было проблемой. Спасибо за указатель

person Community    schedule 22.05.2015