我是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工具。
现在,我想使用访问者来清晰地分离代码和语法。
我知道我需要使用antlr并带上-visitor选项来为我的应用程序生成Visitor类。
我想知道如何在Visitor方法类中访问给定产生式的属性以及如何将词法分析器、解析器和访问者代码片段“粘合”在一起。