我正在研究一种Antlr语法,其中单引号既用作运算符又用作字符串文字,如:
operand: DIGIT | STRINGLIT | reference;
expression: operand SQUOTE;
STRINGLIT: '\'' ~('\\'|'\'')* '\'';
1'
之类的表达式正确解析,但当引号后的~('\\'|'\'')*
输入符合1'+2
时,词法分析器会尝试匹配STRINGLIT
并失败。我希望能够恢复并发出SQUOTE
。任何想法如何实现它?
感谢。
答案 0 :(得分:0)
在Antlrworks中稍微测试一下这个语法后,我认为你的问题是你在这里过于严格。如果您有一条规则在1'+2
之后接受了某些内容,Antlr将能够解析operand SQUOTE
。由于ANTLR不知道如何处理+2
,因此会引发异常。