antlr3 - 忽略一个令牌/只解析一次

时间:2015-03-17 15:44:59

标签: java antlr3

目前我尝试解析像

这样的文字

" 播放 by 乐队"

解析媒体播放器的命令。 如果播放标记位于歌曲或艺术家名称中,则会出现问题。 如何忽略歌曲名称和艺术家中的多个标记,或者只在我想要的方向上解析一次标记?

那是我的.g文件:

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;
    }
 ;

0 个答案:

没有答案