我的语法是这样的
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”返回true / false值,如果“logicOperation”为真,我想做“程序”。
我在“程序”生产中使用杯子堆栈来检查“logicOperation”是否为真。
如果只有“elseStatment”而不是“elseIf”,它会工作,但是使用elseIf我无法知道逻辑运算在堆栈中的确切位置。
我该怎么办?
答案 0 :(得分:0)
我做错了,那不是解析器的工作原理。 有两种方法:
抽象语法树:保存过程并在解析后执行
三个地址代码:将代码转换为其他内容,例如汇编程序。
但是如果有人仍需要制作它,那么可以采用继承属性,这是java-cup所不具备的,所以使用bison和c。