正则表达式标记antlrV3

发布于 2024-08-20 12:13:21 字数 185 浏览 4 评论 0原文

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

rule: ID '=' NUMBER
      ;

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

NUMBER: (0 .. 9) +

但前提是令牌 ID 的形式为 var* (var 是固定的)

谢谢

Can I write a rule where the initial token is partly fixed and partly generic?

rule: ID '=' NUMBER
      ;

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

NUMBER: (0 .. 9) +

But only if the token ID is in the form var* (var is fixed)

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

茶花眉 2024-08-27 12:13:21

你是这个意思吗?

// 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,然后稍后检查它的形式是否完全正确。

Do you mean this?

// 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')+
    ;

Either way: when possible, do NOT use a strict lexer grammar for your error messages. They are slower and completely illegible to users. You should parse ID in a relaxed form, then check later on if it's in precisely the correct form.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文