带数字的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+);
我知道肯定有一个明显的解决方案,但我一直在努力寻找一个,但我似乎找不到办法。
提前致谢!
由于前两个词法分析器规则不是 fragment
s,如果输入仅包含数字,或者 ~[;\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 语法问题。
我想要一个能够解析以下所有输入的词法分析器值:
- 只有字母
- 字母和数字
- 只有数字
我的代码如下所示:
解析器规则:
new_string: NEW_STRING+;
词法分析器规则:
NEW_DIGIT: [0-9]+;
STRING_CHAR : ~[;\r\n"'];
NEW_STRING: (NEW_DIGIT+ | STRING_CHAR+ | STRING_CHAR+ NEW_DIGIT+);
我知道肯定有一个明显的解决方案,但我一直在努力寻找一个,但我似乎找不到办法。
提前致谢!
由于前两个词法分析器规则不是 fragment
s,如果输入仅包含数字,或者 ~[;\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+)?);