【发布时间】:2014-05-01 13:25:31
【问题描述】:
我正在使用 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 %%%%%% 等。
【问题讨论】:
-
如果
IntegerLiteral是你的解析器的开始符号,你需要在t=<INTEGER_LITERAL之后添加<EOF>。 -
当我添加
时,它显示预期的 EOF 并且不接受其他输入 -
我认为您需要更清楚地说明您希望解析器识别哪种语言。到目前为止,我们知道“4”在语言中,但“4”。而“4%%%”则不是。此外,该语言包括超过
(<DIGIT>)+。这没什么好继续的。 -
什么意思?整数本身应该可以工作
-
我的意思是你的问题不清楚,因为你没有明确说明需要接受哪些字符串。请改写问题,以更清楚应该接受和不应该接受的内容。
标签: javacc