Условный if statment грамматика для Java Cup - семантическая - PullRequest
1 голос
/ 18 февраля 2012

Моя грамматика что-то вроде этого

ifStatment      ::= IF PARETHESIS logicOperation PARENTHESIS_ KEY procedures KEY_ elseIfStatment;

elseIfStatment  ::= ELSE IF PARENTHESIS logicOperation PARENTHESIS_ KEY procedures KEY_ elseIfStatment  
                    |elseStatment;

elseStatment    ::= ELSE KEY procedures KEY_
                    | ;

«logicOperation» возвращает значение «истина / ложь», а «процедуры» - это то, что я хочу сделать, если «logicOperation» - истина.

Я думал об использовании стакана чашек в производстве «процедур», чтобы проверить, истинно ли «logicOperation».

Это сработало бы, если бы был только "elseStatment", а не "elseIf", но с elseIf, я не мог бы знать точную позицию logicOperation в стеке.

Что мне делать?

1 Ответ

0 голосов
/ 13 марта 2012

Я делал это неправильно, парсер работает не так.Есть два способа сделать это:

  1. Абстрактное синтаксическое дерево: сохранить процедуры и выполнить их после синтаксического анализа

  2. Три кода адреса: выполнить кодк чему-то еще, как ассемблер.

Но если кому-то все еще нужно это сделать, то путь заключается в использовании унаследованных атрибутов, чего нет у java-cup, поэтому используйте bison и c.

...