我在 java 中遇到 antlr4 语法问题。
我想要一个词法分析器值,它能够解析以下所有输入:
- 仅限字母
- 字母和数字
- 仅限数字
我的代码如下所示:
解析器规则:
new_string: NEW_STRING+;
词法分析器规则:
NEW_DIGIT: [0-9]+;
STRING_CHAR : ~[;\r\n"'];
NEW_STRING: (NEW_DIGIT+ | STRING_CHAR+ | STRING_CHAR+ NEW_DIGIT+);
我知道一定有一个明显的解决方案,但我一直在努力寻找一个解决方案,但我似乎找不到办法。
提前谢谢您!
最佳答案
由于前两个词法分析器规则不是片段
,因此如果输入仅包含数字或~[;\r\n"'],它们可以(并且将会)匹配
(因为如果可以匹配同样长的输入序列,则第一个词法分析器规则获胜)。
事实上,STRING_CHAR
可以匹配 NEW_STRING
可以匹配的任何内容,因此永远不会使用后者。
您需要:
- 确保
STRING_CHAR
与数字不匹配 - 制作
NEW_DIGIT
和STRING_CHAR
片段 - 检查星号 - 几乎所有内容都可以在您的词法分析器中重复,乍一看没有意义(但您需要根据我们不知道的要求进行调整)
像这样:
fragment NEW_DIGIT: [0-9];
fragment STRING_CHAR : ~[;\r\n"'0-9];
NEW_STRING: (NEW_DIGIT+ | STRING_CHAR+ (NEW_DIGIT+)?);
关于java - 带数字的antlr4语法字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46403690/