首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cup进行前缀表示法

使用Cup进行前缀表示法
EN

Stack Overflow用户
提问于 2018-12-14 20:03:42
回答 1查看 40关注 0票数 0

我创建了以下代码:

代码语言:javascript
复制
 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,但是程序没有显示正确的解,有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 22:41:20

当您应该像处理标识符和数字一样将中间值作为RESULT返回时,您却打印了运算符的中间值。只有在解析完整个表达式后,才应打印该字符串。(您可以使用单位生产来实现此目的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53779410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档