0

我正在用 Jflex 和 CUP 制作编译器。我试图让我的编译器使这个例子工作。

 start

    x=1;
    y=2;
    z=x+y;
    print(z);

    end

我正在努力将x+y之和的值分配给z

这是我的代码的一部分


    action code {:
        
        public static HashMap<String, Object> hm = new HashMap<>();
        
        
        public static void Put(String identifier, Object value) {
            hm.put(identifier, value);
        }
    
    
                               
        public static Object Get(String identifier) {
            return hm.get(identifier);
        }
       
        public static void Show(String value) {
            System.out.println("Result: " +  value);
            System.out.println("END.");
        }
        
    :};

我的语法是这样的


    statement::= IDENTIFIER:v expr:e
    
                {: RESULT = Get((String)v); :}
            | IDENTIFIER:v = expr:e {: Put((String)v, e); :}
            | IDENTIFIER:v1 = IDENTIFIER:v2 {: Put((String)v1, Get((String)v2)); :} 
            | PRINT LPARENTESIS IDENTIFIER:v RPARENTESIS  {: System.out.println(Get((String)v)); :}                 
           | IDENTIFIER:v1 = IDENTIFIER:v2 SUM IDENTIFIER:v3 {: Put((String)v1, Get((String)v2+v3)); :} 
                    |expr:e
            |
    ;
    
    expr ::= expr:e1 SUM expr:e2
            {: RESULT ASIGN new Integer(e1.intValue() + e2.intValue());   :}
            | expr:e1 MINUS expr:e2
            {: RESULT = new Integer(e1.intValue() - e2.intValue()); :}
            | NUMBER:n
            {: RESULT = n;  System.out.println(n);  :}
            | LPARENTESIS expr:e RPARENTESIS 
            {: RESULT = e; :}
            ;


符号

SUM = "+" 
LPARENTESIS  = "(" 
RPARENTESIS = ")" 
MINUS= "-" 
ASIGN = "="`



 | IDENTIFIER:v1 = IDENTIFIER:v2 + IDENTIFIER:v3 {: Put((String)v1, Get((String)v2+v3)); :}

这是我努力添加 v2 和 v3 的值并将其存储在 v1 中的地方

我在java中编程不多,需要帮助谢谢

4

0 回答 0