Do Prefix Notation с чашкой - PullRequest
       46

Do Prefix Notation с чашкой

0 голосов
/ 14 декабря 2018

Я создаю этот код:

 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;

Решение этого выражения: альфа + бета * гамма +77 + + альфа * бета гамма 77, но программа не показывает правильное решение, любой может помочья

1 Ответ

0 голосов
/ 14 декабря 2018

Вы печатаете промежуточное значение операторов, когда вы должны возвращать его как RESULT, как вы делаете с идентификаторами и числами.Вы должны печатать строку только после завершения анализа всего выражения.(Вы можете использовать единицу продукции для этого.)

...