Java CUP-令牌值为空

时间:2019-07-03 21:08:55

标签: java parsing lexer jflex cup

我想打印出在解析器中调用的令牌的值(由扫描程序返回),但是每个令牌都显示为空。

例如,当输入文件为

tmp := X*X;

此语法应打印“ 分配了tmp ”,而不是“空分配”:

assignment      ::= IDENTIFIER:i ASSIGNMENT math_expression SEMI
          {: System.out.println(i + " assigned"); :}; // null assigned

除了实际代码:D之外,还有其他方法可以获取实际值吗?还是我需要采取进一步的措施来获取实际值?

可能需要的部分代码:

lexer.jflex

public Symbol symbol(String name, int code){
    return symbolFactory.newSymbol(name, code,
                    new Location(yyline+1,yycolumn+1, yychar), 
                    new Location(yyline+1,yycolumn+yylength(), yychar+yylength())
            );
}
public Symbol symbol(String name, int code, String lexem){
    return symbolFactory.newSymbol(name, code, 
                    new Location(yyline+1, yycolumn +1, yychar), 
                    new Location(yyline+1,yycolumn+yylength(), yychar+yylength()), lexem);
}

我以YYINITIAL状态返回它的方式:

{identifier}        {return symbolFactory.newSymbol("IDENTIFIER", IDENTIFIER);}

parser.cup

terminal String     IDENTIFIER;

0 个答案:

没有答案