用Cup做前缀符号



我创建了这个代码:

import java_cup.runtime.*;

terminal MAS,MENOS,POR,DIV,AP,CP,MINUS;
terminal String NUMERO,IDENT;
non terminal A;
precedence left  MAS,MENOS;
precedence left POR,DIV;
precedence left AP,CP;
precedence left MINUS;

A ::= A:a1 MAS {:System.out.print("+ ");:} A:a2 {:System.out.print(a1+""+a2+" ");RESULT = "";:} 
| A:a1 MENOS {:System.out.print("- ");:} A:a2 {:System.out.print(a1+""+a2+" ");RESULT = "";:} 
| A:a1 POR {:System.out.print("* ");:} A:a2 {:System.out.print(a1+""+a2+" ");RESULT = "";:} 
| A:a1 DIV {:System.out.print("/ ");:} A:a2 {:System.out.print(a1+""+a2+" ");RESULT = "";:} 
| AP {:System.out.print("");:} A:a1 CP {:System.out.print("");RESULT = "";:}
| NUMERO:n1 {:RESULT = n1+" ";:}
| IDENT:i1 {:RESULT = i1+" ";:}
| MENOS  A:a1
%prec MINUS;

这个表达式的解决方案:alfa+beta*gamma+77是++alfa*beta gamma 77,但程序没有显示正确的解决方案,有人能帮我吗?

您正在打印运算符的中间值,而您应该像对待标识符和数字一样将其返回为RESULT。只有在解析完整个表达式后,才应该打印字符串。(你可以使用单位产量。(

相关内容

  • 没有找到相关文章

最新更新