如何在Antlr4中解析可选岛文本

  • 本文关键字:文本 Antlr4 antlr4
  • 更新时间 :
  • 英文 :


作为我的小语言示例问题的延续,我想询问如何解析以下文本。这次只想跳过尾巴规则,但这是一个岛屿,对我来说并不明显。最好的,不太黑的方法?

a : sss 
a : eeee:yyyy 
a :  
a : tttt:aaa

使用以下语法使用词汇模式:

simplel.g4

lexer grammar SimpleL;    
fragment WS : [ trn]+;
SEMI : ':' -> pushMode(TMODE);
HEAD : 'a' ;
WS_DEFAULT: WS -> skip;
mode TMODE;
TAIL   :   [a-z:]+  -> popMode;
WS_TMODE : WS -> skip;

simple.g4

parser grammar Simple;  
options {
  tokenVocab = SimpleL;
}
prog : entry+ EOF;
entry : head semi tail;
semi : SEMI;    
tail : TAIL;    
head : HEAD;

目的是捕获尾部规则不存在的情况。但是,如果所有白色空间都被跳过,则下一节 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>)

我尝试的是解析器中的规则:

 entry : (head semi head semi tail | head semi tail);

 entry : (head semi tail?);

通过Lexer规则的不同顺序。也尝试了更多词汇命令,没有成功。

似乎您确实想将'newline'作为逃脱字符,例如';''在大多数编程语言中。因此,Newline不仅必须成为规则,而不仅要成为一个空间特征。

相关内容

  • 没有找到相关文章

最新更新