在Parser Grammar中我想在中定义几个变量
locals
条款。
简化示例如下所示:
body
locals [
Map<String, String> bodyContent = new HashMap<String, String>();
long counter = 0;
]
: BODY_CAPTION NEWLINE line ;
line : key='MyKey' TAB value='MyValue' NEWLINE
{
$body::bodyContent.put($key.text, $value.text);
$body::counter++;
} ;
这给出了错误:
unknown attribute 'counter' for rule 'body' in '$body::counter'
如果我像{/ p>那样交换locals
子句中的行
locals [
long counter = 0;
Map<String, String> bodyContent = new HashMap<String, String>();
]
它给出了错误:
unknown attribute 'bodyContent' for rule 'body' in '$body::bodyContent'
显然,ANTLR只识别locals
子句中的第一个局部变量定义。
有没有办法在locals
下定义多个局部变量?
答案 0 :(得分:7)
是的,但它们以逗号分隔,如参数列表和returns
子句。
locals [
Map<String, String> bodyContent = new HashMap<String, String>(),
long counter = 0
]