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

标签 antlr4

在解析器语法中,我想在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'
如果我交换 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下定义多个局部变量?

最佳答案

是的,但它们像参数列表和 returns 一样用逗号分隔条款。

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

关于antlr4 - ANTLR 是否允许在 locals 子句中定义多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16644200/

相关文章:

javascript - 即使 b 在 a 的原型(prototype)链中,a instanceof b也会返回 false

antlr - ANTLR4 中的递归词法分析器规则有什么用?

java - 使用 DOTGenerator 将 ANTLR4 解析树解析为 DOT

java - 我想使用 ANTLR4 从 java 源文件中提取所有方法名称和变量名称

javascript - 处理 ANTLR4 JavaScript 中的错误

java - 如何从 Antlr4 语法在控制台上打印一些内容

token - ANTLR4:隐式或显式 token 定义

r - R是否存在现有的ANTLR或IRONY语法?

java - 如何使用antlr4 plsql语法(java和org.antlr.v4.gui.TestRig)

antlr - 使用 ParseTreeWalker 中止树遍历