antlr4语法字符串,带数字



我在java中对antlr4语法有问题。

我想拥有一个能够解析以下所有输入的lexer值:

  • 只有字母
  • 字母和数字
  • 只有数字

我的代码看起来像这样:

解析器规则:

new_string: NEW_STRING+;

Lexer规则:

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

我知道必须有一个明显的解决方案,但是我一直在尝试找到一个解决方案,而且我似乎无法找到一种方法。

预先感谢您!

,由于前两个lexer规则不是 fragment s,因此,如果输入仅包含数字或 ~[;rn"'],则可以(并且将)匹配(如果输入的长序列可以匹配,则,第一个Lexer规则获胜)。

实际上,STRING_CHAR可以匹配NEW_STRING可以使用的任何东西,因此永远不会使用后者。

您需要:

  • 确保STRING_CHAR与数字不匹配
  • 使NEW_DIGITSTRING_CHAR片段
  • 检查星号 - 几乎所有内容都可以在您的Lexer中重复,一开始就没有意义(但是您需要根据我们不知道的要求进行调整)

这样:

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

相关内容

  • 没有找到相关文章

最新更新