ANTLR 语法中的 Equal(不是标记)是什么意思?

问题描述 投票:0回答:2

以下规则中的

basename =
构造了什么?

tabname:
   (ID'.')? basename = ID
;

语法中仅出现一次

basename

parsing token antlr grammar
2个回答
3
投票

在该语法中使用 equals 创建一个名为

basename
的变量,然后可以在操作中引用该变量:

tabname:
    (ID '.')? basename=ID {
        if ($basename.equals("CAT"))
            System.out.println("CAT found");
    };

1
投票

用于命名变量。

如果您想在解析器期间运行一些代码,这可能非常有用。

考虑 Java 计算器示例:

expr returns [float r]
{
float a,b;
r=0;
}
:   #(PLUS a=expr b=expr)   {r = a+b;}
|   #(STAR a=expr b=expr)   {r = a*b;}
|   i:INT           {r = (float)Integer.parseInt(i.getText());}
;

这里我们说,当我们匹配具有 PLUS 或 STAR 标记后跟 2 个表达式的树时,我们将匹配表达式并分别将它们命名为

a
b

之后我们将使用我们在 java 语句中匹配的那些变量。 该声明包含在

{
}
括号内。 这里我们使用java语句来实际进行计算。

© www.soinside.com 2019 - 2024. All rights reserved.