首页 > 解决方案 > Java CUP - 令牌值为空

问题描述

我想打印出解析器中调用的标记的值(由扫描仪返回),但是每个标记都显示为空。

例如当输入文件是

tmp := X*X;

这个语法应该打印“ tmp assignment ”而不是“null assignment”:

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

有没有其他方法可以获得实际价值(除了书面代码:D),还是我应该做任何进一步的步骤来获得它们?

可能需要的部分代码:

词法分析器

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);}

解析器.cup

terminal String     IDENTIFIER;

标签: javaparsinglexerjflexcup

解决方案


推荐阅读