gpt4 book ai didi

java - ANTLR : rules with arguments?

转载 作者:行者123 更新时间:2023-12-01 14:09:44 24 4
gpt4 key购买 nike

我是 ANTLR 的新手。我开始探索 ANTLR 教程。我已经看到为特定规则定义了返回类型的示例(请参见下面的示例)。

我也可以将参数传递给规则吗?我只是想通了,我想根据提供给它的论据来改变规则在一个微不足道的状态下的行为。

如果它在 ANTLR 中可以通过,请帮助我,或者这样做是个好主意吗?

atom returns [int value]
:
INT
{
$value = Integer.parseInt($INT.text);
}
| ID // variable reference
{
Integer v = (Integer) memory.get($ID.text);
if (v != null)
$value = v.intValue();
}
;

最佳答案

是的,但是您不能将参数从解析器规则传递到词法分析器规则:词法分析器独立于解析器构造标记。

规则参数示例:

parse
: p1["param"]
;

p1 [String s]
: ref=p2[$s, 42]
{
// Print some info about rule 'p2'.
System.out.println("param=" + $s);
System.out.println("p2.ss=" + $ref.ss);
System.out.println("p2.ii=" + $ref.ii);
}
;

// Rules can have more than 1 param, and can even return more than 1 value.
p2 [String s, int i] returns [String ss, int ii]
: ID
{
$ss = $s + "_" + $ID.text;
$ii = $i + $i;
}
;

ID
: ('a'..'z')+
;

如果您现在要解析输入 "mu",则会将以下内容打印到您的控制台:

param=param
p2.ss=param_mu
p2.ii=84

关于java - ANTLR : rules with arguments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21747097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com