Antlr语法用单引号加倍作为运算符

时间:2010-07-21 22:04:45

标签: antlr

我正在研究一种Antlr语法,其中单引号既用作运算符又用作字符串文字,如:

operand:     DIGIT | STRINGLIT | reference;
expression:  operand SQUOTE;
STRINGLIT:   '\''  ~('\\'|'\'')* '\'';

1'之类的表达式正确解析,但当引号后的~('\\'|'\'')*输入符合1'+2时,词法分析器会尝试匹配STRINGLIT并失败。我希望能够恢复并发出SQUOTE。任何想法如何实现它?

感谢。

1 个答案:

答案 0 :(得分:0)

在Antlrworks中稍微测试一下这个语法后,我认为你的问题是你在这里过于严格。如果您有一条规则在1'+2之后接受了某些内容,Antlr将能够解析operand SQUOTE。由于ANTLR不知道如何处理+2,因此会引发异常。