ANTLR是否允许locals子句中的多个变量定义?

时间:2013-05-20 06:59:32

标签: antlr4

在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下定义多个局部变量?

1 个答案:

答案 0 :(得分:7)

是的,但它们以逗号分隔,如参数列表和returns子句。

locals [
    Map<String, String> bodyContent = new HashMap<String, String>(),
    long counter = 0
]