【发布时间】:2014-12-10 16:19:47
【问题描述】:
我是 AntLR 的新手。我用的是 AntLR4 版本。
我编写了以下属性语法,它识别整数列表并在末尾打印列表的总和。
list.g4
grammar list;
@header
{
import java.util.List;
import java.util.ArrayList;
}
list
: BEGL (elems[new ArrayList<Integer>()])? ENDL
{
int sum = 0;
if($elems.text != null)
for(Integer i : $elems.listOut)
sum += i;
System.out.println("List Sum: " + sum);
}
;
elems [List<Integer> listIn] returns [List<Integer> listOut]
: a=elem (SEP b=elem
{ listIn.add($b.value); }
)*
{
listIn.add($a.value);
$listOut = $listIn;
}
;
elem returns [int value]
: NUM { $value = $NUM.int; }
;
BEGL : '[';
ENDL : ']';
SEP : ',';
NUM : [0-9]+;
WS : (' '|'\t'|'\n')+ -> skip;
有效的输入是:
[1, 2, 3]
为了测试我的语法,我正在使用 TestRig Tool。
现在,我想用Visitors来清楚地把代码和语法分开。
我知道我需要使用带有 -visitor 选项的 antlr 来为我的应用程序生成访问者类。
我想知道如何在访问者方法类中访问给定产品的属性,以及如何将词法分析器、解析器和访问者代码片段“粘合”在一起。
【问题讨论】: