如何解析antlr4中的可选孤岛文本

如何解析antlr4中的可选孤岛文本,antlr4,Antlr4,作为我的继续,我想问一下如何解析下面的文本。这次我只是想跳过尾部规则,但这是一个孤岛,对我来说并不明显。最好的,不那么刻薄的方法 a : sss a : eeee:yyyy a : a : tttt:aaa 使用以下使用词法模式的语法: SimpleL.g4 简单g4 这样做的目的是为了抓住不存在尾部规则的情况。但是,如果跳过所有的空格,下一节a:tttt:aaa将变成尾部,我无法区分这些情况。目标情况如下: (prog (entry (head a) (semi :) (tail s

作为我的继续,我想问一下如何解析下面的文本。这次我只是想跳过尾部规则,但这是一个孤岛,对我来说并不明显。最好的,不那么刻薄的方法

a : sss 
a : eeee:yyyy 
a :  
a : tttt:aaa
使用以下使用词法模式的语法:

SimpleL.g4

简单g4

这样做的目的是为了抓住不存在尾部规则的情况。但是,如果跳过所有的空格,下一节a:tttt:aaa将变成尾部,我无法区分这些情况。目标情况如下:

(prog (entry (head a) (semi :) (tail sss)) 
      (entry (head a) (semi :) (tail eeee:yyyy)) 
      (entry (head a) (semi :) (tail )
      (entry (head a) (semi :) (tail tttt:aaa)
 ) <EOF>)


具有不同的lexer规则顺序。还尝试了词法更丰富的命令,但没有成功。

似乎确实希望将“换行符”作为转义字符,如“;”在大多数编程语言中。因此,换行必须成为一项规则,而不仅仅是一个空白字符。

我不知道你在问什么。您能否提供一个更详细的解释,说明您试图完成的任务、遇到的问题以及您认为问题所在的位置?只是让问题更加详细。如果解析器输入最终的规则头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头半头。好像解决方案依赖于解析器中的空白。
parser grammar Simple;  

options {
  tokenVocab = SimpleL;
}

prog : entry+ EOF;

entry : head semi tail;

semi : SEMI;    
tail : TAIL;    
head : HEAD;
(prog (entry (head a) (semi :) (tail sss)) 
      (entry (head a) (semi :) (tail eeee:yyyy)) 
      (entry (head a) (semi :) (tail )
      (entry (head a) (semi :) (tail tttt:aaa)
 ) <EOF>)
 entry : (head semi head semi tail | head semi tail);
 entry : (head semi tail?);