缩进嵌套列表的ANTLR语法
我想知道是否有可能为分层缩进列表创建语法,如下所示:缩进嵌套列表的ANTLR语法,antlr,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
→ 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;
语法测试;
清单:(项目)+;
项目名称:NL(子列表[1])*;
子列表[int n]:(子项[$n])+;
子项[int n]局部变量[int i=1;]:({$i跳过;
i、 e.使用ANTLR变量和语义谓词,但根据我所希望的-({semantic predicate}?TERM)+
,根本不像我所期望的那样工作(它只需要触发一定的次数-消耗流),从而产生错误的结果
具体地说,在输入上有>b12
,当使用n=3
调用子项时,此部分:
({$i您可以在Python语法中查找它是如何完成的。()主要思想是重新编写标记以合成IDENT/DEDENT对。谢谢,我来看看。我知道已经有indent/DEDENT(如HTML)的列表更容易解析。但是我不想在ANTLR之外使用任何类型的预处理,所以用它的方法重写对我来说非常有趣。你可以在Python语法中查看它是如何完成的。()主要的想法是重新编写标记来合成IDENT/DEDENT对。谢谢,我会看一看。我知道已经有indent/DEDENT的列表(比如HTML列表)更容易解析。但是我不想在ANTLR之外使用任何类型的预处理,所以用它的方法重写对我来说非常有趣。