Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java antlr3-忽略令牌/仅解析一次_Java_Antlr3 - Fatal编程技术网

Java antlr3-忽略令牌/仅解析一次

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;

目前,我试图解析一个文本,如

顺路演奏

解析mediaplayer的命令。 如果这出戏是以一首歌或一位艺术家的名义演出,我会遇到问题。 我怎样才能忽略songname和Artister中的多个标记,或者在我想要的方向上只解析一次标记

这是我的.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;
    }
 ;

问题是,它有点模棱两可,例如,哪个是正确的:ABC by ba还是ABC by ba。你认为歌曲名只包含一次吗?不,我不认为它只出现一次。它的背后是一个数据库,我想如果我有类似于“按艺术家播放ABC”这样的东西,我就得走过去。例如,选择ABC by from。。。并从中选择ABC。。。等等但我想避免这种情况。那么,在我的例子中,你如何判断哪一个是正确的呢。。。我想在不接触数据库的情况下无法解析它。。。除非我有一个聪明的想法,这是一个聪明的解决方案!对不起,我忘了提到它是一个应该被解析的语音命令,所以我不能用hashtags代替by。我想我需要一些像艺术家红辣椒边玩边玩的东西。