【问题标题】:Do Prefix Notation with Cup用 Cup 做前缀表示法
【发布时间】:2018-12-14 12:03:42
【问题描述】:

我创建了这段代码:

 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 is ++ alfa * beta gamma 77 但是程序没有显示正确的解决方案,任何人都可以帮助我吗?

【问题讨论】:

    标签: java parsing flex-lexer cup


    【解决方案1】:

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

    【讨论】:

    • 谢谢现在它工作了,还有一个问题,它可以调试杯子来查看接下来的生产列表吗?
    • @ivan:我不太了解 CUP 的调试功能,抱歉。但无论如何,这是一个完全不同的问题,应该这样问。
    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 2016-11-04
    • 2011-09-23
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多