Java antlr3-忽略令牌/仅解析一次
目前,我试图解析一个文本,如 顺路演奏 解析mediaplayer的命令。 如果这出戏是以一首歌或一位艺术家的名义演出,我会遇到问题。 我怎样才能忽略songname和Artister中的多个标记,或者在我想要的方向上只解析一次标记 这是我的.g文件:Java antlr3-忽略令牌/仅解析一次,java,antlr3,Java,Antlr3,目前,我试图解析一个文本,如 顺路演奏 解析mediaplayer的命令。 如果这出戏是以一首歌或一位艺术家的名义演出,我会遇到问题。 我怎样才能忽略songname和Artister中的多个标记,或者在我想要的方向上只解析一次标记 这是我的.g文件: text returns [String value] : speech=wordExp (space s1=name)? (byartist space a1=name)? { command = $speech.text;
text returns [String value]
: speech=wordExp (space s1=name)? (byartist space a1=name)? {
command = $speech.text;
match = $s1.text;
artist = $a1.text;
}
;
name
: s1 = (WORD (space s2 = WORD)*)
;
byartist
: space BY
;
wordExp
: PLAY | STOP
;
//Lexer
PLAY : 'play';
STOP : 'stop';
BY : 'by';
space : ' ';
WORD : ( 'a'..'z' | 'A'..'Z' )*; // digits in here?
WS : ('\t' | '\r'| '\n') {
$channel=HIDDEN;
}
;
问题是,它有点模棱两可,例如,哪个是正确的:ABC by ba还是ABC by ba。你认为歌曲名只包含一次吗?不,我不认为它只出现一次。它的背后是一个数据库,我想如果我有类似于“按艺术家播放ABC”这样的东西,我就得走过去。例如,选择ABC by from。。。并从中选择ABC。。。等等但我想避免这种情况。那么,在我的例子中,你如何判断哪一个是正确的呢。。。我想在不接触数据库的情况下无法解析它。。。除非我有一个聪明的想法,这是一个聪明的解决方案!对不起,我忘了提到它是一个应该被解析的语音命令,所以我不能用hashtags代替by。我想我需要一些像艺术家红辣椒边玩边玩的东西。