gpt4 book ai didi

antlr3 - 如何使用 ANTLR3 java 目标解析以特定字母开头的单词

转载 作者:行者123 更新时间:2023-12-02 03:39:54 25 4
gpt4 key购买 nike

有没有办法解析以特定字符开头的单词?

我一直在尝试以下方法,但没有得到任何有希望的结果:

//This one is working it accepts AD CD and such
example1
:
.'D'
;
//This one is not, it expects character D, then any ws character then any character
example2
:
'D'.
;
//These two are not working either
example3
:
'D'.*
;
//Doesn't accept input due to error: "line 1:3 missing 'D' at '<EOF>'"
example4
:
.*'D'
;


//just in case my WS rule:
/** WhiteSpace Characters (HIDDEN)*/
WS : ( ' '
| '\t'
)+ {$channel=HIDDEN;}
;

我正在使用 ANTLR 3.4

提前致谢

最佳答案

//This one is not, it expects character D, then any ws character then any character
example2
:
'D'.
;

不,它不接受 token (不是字符!) 'D' 后跟一个空格,然后是任何字符。由于 example2 是一个解析器规则,它不匹配字符,而是匹配标记(有很大的区别!)。并且由于您将空格放在单独的 channel 上,因此该规则也不匹配这些空格。最后,. (DOT) 匹配任何标记(同样:不是任何字符!)。

有关元字符(如 . (DOT))的更多信息,其含义在词法分析器和解析器规则中不同:Negating inside lexer- and parser rules

//These two are not working either
example3
:
'D'.*
;
//Doesn't accept input due to error: "line 1:3 missing 'D' at '<EOF>'"
example4
:
.*'D'
;

除非您确切地知道自己在做什么,否则不要使用 。*:它们在您的案例中吞噬了太多东西(尤其是当放在规则的开头或结尾时)。

看起来您正在尝试对解析器内部的内容进行标记化(您所有的 example 规则都是解析器规则)。据我所知,这些应该是词法分析器规则。有关解析器规则和词法分析器规则之间区别的更多信息,请参阅:Practical difference between parser rules and lexer rules in ANTLR?

关于antlr3 - 如何使用 ANTLR3 java 目标解析以特定字母开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745141/

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