缩进嵌套列表的ANTLR语法

时间:2015-11-03 22:48:28

标签: antlr

我想知道是否可以为这样的分层缩进列表创建一个语法:

→ a
→ b
  → b1
    → b11
    → b12
  → b2
  → b3
→ c

哪个文本表示可以简化为:

a
b
>b1
>>b11
>>b12
>b2
>b3
c

主要问题是我没有看到保存和使用嵌套级别的方法。我试过的是:

grammar test;
list: (item)+ ;
item: NAME NL (sublist[1])*;
sublist[int n]: (subitem[$n])+;
subitem[int n] locals [int i=1;]: ({$i <= $n}? ID {$i++;})+ NAME NL (sublist[$n+1])*;
NAME: [a-z0-9]+;
ID: '>';
NL: '\r' ? '\n';
WS : [ \t]+ -> skip;

即。使用ANTLR变量和语义谓词,但基于我所希望的 - ({semantic-predicate}? TERM )+ - 根本不能像我预期的那样工作(它只触发所需的次数 - 使用流)产生不正确的结果。

具体来说,在输入>>b12时,subitemn=3一起调用时,此部分:

({$i <= $n}? ID {$i++;})+

而不是'期待'三个'&gt;' - 字符,触发器在第二个。

想法?

0 个答案:

没有答案