我正在使用JavaCC构建一个词法分析器和一个解析器,我有以下代码:
TOKEN:
{
< #DIGIT : [ "0"-"9" ] >
|< INTEGER_LITERAL : (<DIGIT>)+ >
}
SimpleNode IntegerLiteral() :
{
Token t;
}
{
(t=<INTEGER_LITERAL>)
{
Integer n = new Integer(t.image);
jjtThis.jjtSetValue( n );
return jjtThis;
}
}因此,它应该只接受整数,但它也接受4.或4%等。
发布于 2015-01-29 03:05:56
尝试在解析器规范文件中打开调试,如下所示:
OPTIONS {
DEBUG_TOKEN_MANAGER=true
}这将创建TokenManager在解析时所做的打印输出。
发布于 2015-08-18 01:06:49
"4.“和"4%%%%“并不是真正被接受的,因为如果您设置DEBUG_PARSER =true,解析器读取的内容总是"4”;在选项部分,您将看到当前读取的标记。我认为如果你像这样改变你的语法,你可以看到当它读取未处理的字符时抛出一个TokenMgrError
SimpleNode IntegerLiteral() :
{
Token t;
}
{
(
t=<DIGIT>
{
Integer n = new Integer(t.image);
jjtThis.jjtSetValue( n );
return jjtThis;
})+
}https://stackoverflow.com/questions/23408633
复制相似问题