带单引号并用作运算符的Antlr语法

带单引号并用作运算符的Antlr语法,antlr,Antlr,我正在研究一种Antlr语法,其中单引号既用作运算符,也用作字符串文本,类似于: operand: DIGIT | STRINGLIT | reference; expression: operand SQUOTE; STRINGLIT: '\'' ~('\\'|'\'')* '\''; 像1'这样的表达式可以正确解析,但是如果在引号后面有匹配~'\\'\'\'\*的输入,例如1'+2,lexer将尝试匹配STRINGLIT,但失败。我希望能够恢复并发射SQUOTE。有什么办法

我正在研究一种Antlr语法,其中单引号既用作运算符,也用作字符串文本,类似于:

operand:     DIGIT | STRINGLIT | reference;
expression:  operand SQUOTE;
STRINGLIT:   '\''  ~('\\'|'\'')* '\'';
像1'这样的表达式可以正确解析,但是如果在引号后面有匹配~'\\'\'\'\*的输入,例如1'+2,lexer将尝试匹配STRINGLIT,但失败。我希望能够恢复并发射SQUOTE。有什么办法可以做到吗


谢谢

在Antlrworks中测试了一下这个语法之后,我认为你的问题是你在这里限制太多了。如果有一个规则在看到操作数SQUOTE后接受了某些内容,那么Antlr将能够解析1'+2。由于ANTLR不知道如何处理+2,它会抛出一个异常。

您能告诉我们引用的确切外观吗?