gpt4 book ai didi

antlr - 我的 ANTLR 词法分析器如何匹配由另一种 token 子集的字符组成的 token ?

转载 作者:行者123 更新时间:2023-12-04 19:22:52 24 4
gpt4 key购买 nike

我有一个简单的 ANTLR 问题。我有两种 token 类型:identspecial_ident .我要我的 special_ident匹配单个字母后跟单个数字。我想要通用的 ident匹配单个字母,可选后跟任意数量的字母或数字。我的(不正确的)语法如下:

expr 
: special_ident
| ident
;

special_ident : LETTER DIGIT;
ident : LETTER (LETTER | DIGIT)*;

LETTER : 'A'..'Z';
DIGIT : '0'..'9';

当我尝试检查此语法时,收到此警告:

Decision can match input such as "LETTER DIGIT" using multiple alternatives: 1, 2. As a result, alternative(s) 2 were disabled for that input



我知道我的语法有歧义,而且输入如 A1可以匹配 identspecial_ident .我真的只想要 special_ident用于最狭窄的情况。

这是一些示例输入以及我希望它匹配的内容:
A      : ident
A1 : special_ident
A1A : ident
A12 : ident
AA1 : ident

我怎样才能形成我的语法,以便正确识别我的两种类型的标识符?

最佳答案

似乎您有3种情况:

  • A
  • AN
  • A(A|N)(A|N)+

  • 您可以将中间的分类为 special_ident而另外两个为 ident ;似乎应该可以解决问题。

    我对 ANTLR 有点生疏,我希望这个提示足够了。我可以尝试为您写出表达式,但它们可能是错误的:
    long_ident    : LETTER (LETTER | DIGIT) (LETTER | DIGIT)+
    special_ident : LETTER DIGIT;
    ident : LETTER | long_ident;

    关于antlr - 我的 ANTLR 词法分析器如何匹配由另一种 token 子集的字符组成的 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173458/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com