我想知道是否可以为这样的分层缩进列表创建一个语法:
→ 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
时,subitem
与n=3
一起调用时,此部分:
({$i <= $n}? ID {$i++;})+
而不是'期待'三个'&gt;' - 字符,触发器在第二个。
想法?