带数字的antlr4语法字符串

antlr4 grammar string with number

我在 java 中遇到 antlr4 语法问题。

我想要一个能够解析以下所有输入的词法分析器值:

我的代码如下所示:

解析器规则:

new_string: NEW_STRING+;

词法分析器规则:

NEW_DIGIT: [0-9]+;
STRING_CHAR : ~[;\r\n"'];
NEW_STRING: (NEW_DIGIT+ | STRING_CHAR+ | STRING_CHAR+ NEW_DIGIT+);

我知道肯定有一个明显的解决方案,但我一直在努力寻找一个,但我似乎找不到办法。

提前致谢!

由于前两个词法分析器规则不是 fragments,如果输入仅包含数字,或者 ~[;\r\n"'](因为如果等长的输入序列可以被匹配,第一个词法分析器规则获胜)。

事实上,STRING_CHAR 可以匹配 NEW_STRING 可以匹配的任何内容,因此永远不会使用后者。

您需要:

  • 确保 STRING_CHAR 不匹配数字
  • 制作NEW_DIGITSTRING_CHAR个片段
  • 检查星号 - 几乎所有内容都允许在您的词法分析器中重复,乍一看没有意义(但您需要根据我们不知道的要求进行调整)

像这样:

fragment NEW_DIGIT: [0-9];
fragment STRING_CHAR : ~[;\r\n"'0-9];
NEW_STRING: (NEW_DIGIT+ | STRING_CHAR+ (NEW_DIGIT+)?);