【问题标题】:How to describe String that contains characters with range counts under ANTLR4 lexer rules?如何在 ANTLR4 词法分析器规则下描述包含具有范围计数的字符的字符串?
【发布时间】:2015-02-15 11:54:36
【问题描述】:

航班号有规定(如:CZ3102),2个字符后跟3-4位数字。 它的正则表达式应该是: [A-Z]{2}[0-9]{3,4}。

那么ANTLR4下的lexer规则怎么写?

一个简单的词法分析器规则是: [A-Z][A-Z][0-9][0-9][0-9][0-9]?

但这不是那么优雅,而且如果范围很大,比如 1-255,那么词法分析器规则就不是那么容易了。

谢谢

【问题讨论】:

  • 在 ANTLR4 背后使用 java 正则表达式。所以也许像this 这样的东西会起作用。
  • @GiovanniBotta 您的说法与事实相去甚远。 ANTLR 4 使用带有按需 DFA 缓存的 NFA 模拟的自定义实现。在 ANTLR 4 运行时的任何地方都没有引用 Java 的正则表达式实现,更不用说词法分析器实现本身了。
  • 哇,我简直不敢相信,我检查了 github repo。基本上没有引用 java.util.regex。接得好!不幸的是,我找不到 ANTLR4 正则表达式的参考。我以前有这本书,但我现在没有了,所以我无法确认它在里面。
  • 我猜this 是一个开始。
  • 那么,小伙伴们,如何解决我的问题呢?或者使用非贪心机制:[A-Z]+?[0-9]+?

标签: antlr4


【解决方案1】:

但这不是那么优雅,而且如果范围很大,比如 1-255,那么词法分析器规则就不是那么容易了。

仅对数字进行标记,并在解析器侦听器或访问者中验证数值。

相关链接:

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多