7.1 JavaCC中的Action
javacc的规则中可以声明,定义,计算和返回变量。
返回的语义值类型 非终端符号名 参数列表
{
临时变量声明
}
{
规则{action}
}
e.g:
// #@@range/defstruct{
//设置返回类型为StructNode
StructNode defstruct():
{
//声明临时变量
Token t;
String n;
List<Slot> membs;
}
{
t=<STRUCT> n=name() membs=member_list() ";"
{
//返回
return new StructNode(location(t), new StructTypeRef(n), n, membs);
}
}
要注意写在action之后的token也完全可能因为之前的Lookahead被扫描进来了
这里获取非终端符号语义值的方法就是n=name(),相当于调用name对应的解析并且将返回的值赋给n。
t=