【问题标题】:Regular expression token antlrV3正则表达式令牌 antlrV3
【发布时间】:2010-02-08 19:25:56
【问题描述】:

我可以写一个初始标记部分固定部分通用的规则吗?

rule: ID '=' NUMBER
      ;

ID: (A.. Z | a.. Z) +

NUMBER: (0 .. 9) +

但仅当令牌 ID 采用 var* 形式时(var 是固定的)

谢谢

【问题讨论】:

  • 'But only if token ID is in form var* (in regular expression where var is fixed)'是什么意思?
  • 我需要一个解析器来解析这样的代码:varA = 3 vare = 5 varDF = 3 ... 其中 var 是固定的,否则我会收到异常通知
  • 啊,我明白了。嗯,那么 280Z28 已经回答了你的问题。

标签: parsing antlr expression token lexer


【解决方案1】:

你是这个意思吗?

// Use this instead of ID in all parser rules that take either token
identifier
    :   VAR_ID | ID
    ;

VAR_ID
    :   'var' ('A'..'Z' | 'a'..'z')*
    ;

ID
    :   ('A'..'Z' | 'a'..'z')+
    ;

无论哪种方式:如果可能,请不对您的错误消息使用严格的词法分析器语法。它们速度较慢并且用户完全无法辨认。您应该以轻松的形式解析ID,然后稍后检查它是否完全正确。

【讨论】:

  • 谢谢。但是令牌 ID 存在于其他规则中,我需要它保持通用。
  • @Boo:如果你遵循我的strong建议,它仍然是一般性的。
  • 如果你说你在解析器中做这正是我所需要的。请留下我,你可以发布一个例子吗?我不是 ANTLR 方面的专家……非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多