为什么JavaCC总是在前瞻中给出终端错误?就像在这个例子中,JavaCC遇到词法错误,当lookahead遇到文件结尾
options{
LOOKAHEAD = 2;
}
PARSER_BEGIN(GS)
public class GS{
public static void main(String args[]) throws ParseException {
GS parser = new GS(System.in);
parser.q0();
}
}
PARSER_END(GS)
void q0():
{}
{
"a" q1() |
"c"
}
void q1():
{}
{
"b" q0()
| "b"
}
在Q1()是有2个选择,一个是读“B”,并移动到Q0,或阅读“b”和最终读数。但是,如果我给出一个输入“ab”,它将会给出一个错误,即使它具有lookahead选项。但是如果我给“(ab)* c”,JavaCC就接受它。
Exception in thread "main" TokenMgrError: Lexical error at line 1, column 3. Encountered: "\r" (13), after : ""
当生产规则
{
"terminal_x" non-terminal()
| "terminal_x"
}
此相同的错误总是发生有什么办法使这种生产规则的不给错误?
我正在使用JavaCC版本。 6.0_1。
谢谢。
编辑:
显然,如果生产规则的形式
{
"terminal_x"
| "terminal_x" non-terminal()
}
错误不会发生。但是,是什么导致了这个错误呢?
我明白了,我的不好。感谢这对我有用。 虽然如果我直接从命令提示符输入,它仍然在等待输入。有没有什么方法可以说明阅读完成? – tettra
在UNIX或Mac上,使用cntl-d。在DOS或Windows上使用cntl-z。这将作为一个EOF令牌而变得松散。 –