ANTLR:带参数的规则?

2023-12-09

我是 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ANTLR:带参数的规则? 的相关文章

随机推荐

  • 如何更改颤动表单中验证错误的位置?

    我有一个 TextFormField 来收集用户身份验证输入 这很好 但是当它显示验证消息时 会发生这种情况 如何更改错误消息的位置以使其不再发生 我只是想要一种方法来轻松解决这个问题并且该领域仍然很漂亮 这是代码 Form key for
  • HTML:Chrome 保存密码

    Firefox 和 IE 要求我保存密码 为什么 Chrome 不询问我 我必须改变什么
  • 更新 Postgres 中主键的部分(订单号)

    我有表 book id part name 1 1 chap 1 1 2 chap 2 1 3 chap 3 1 4 chap 4 主键是 book id 和部分 如何删除第 2 部分并更新部分顺序以获得 book id part name
  • 将数据(电话号码、备注等)添加到现有联系人 (ANDROID 2.1)

    我有 我面临一个大问题 我无法将数据添加到现有联系人 我正在开发一个管理联系人的应用程序 我可以添加 删除或编辑联系人 创建没问题 因为我为联系人创建了所有类型的数据 即使它们是空的 这不是一个好方法 稍后我会更改它 因此 当我想编辑这些数
  • Android 上的 Log4j2

    我正在尝试在 Android 项目上使用 log4j2 我正在 Android Studio 上工作 为了简化这个问题 我将解释我在一个简单的虚拟项目中所做的事情 我在真实项目中遇到的错误与这个虚拟项目中的错误相同 我创建了一个带有主要活动
  • Python 3.x:合并两个具有相同键和值的字典作为数组[重复]

    这个问题在这里已经有答案了 Python版本 3 x 我有两个具有相同键的字典 值是数组 我在这里看到的大多数问题 出于所需的目的 每个键只有一个值 我想要的是将这两个字典与值合并为连接数组 也许下面会清楚 我有什么 d1 1 Autumn
  • h5py.File(path) 无法识别文件夹路径

    我在我的项目文件夹中调用 project 我有两个神经网络 h5 文件 一个位于 project my folder my model 1 h5 中 我还将其复制到文件夹 project my model 2 h5 中 所以我打开在 pro
  • 具有 getter 和 setter 的 JavaScript 类会导致 RangeError:超出最大调用堆栈大小

    我目前正在尝试 ECMA6 课程 我当前的课程如下所示 class Player constructor id this id id this cash 350 get cash return this cash set cash valu
  • 在 Angular 中从不同的本地主机获取数据

    在角度中 ng serve port 4200 host 0 0 0 0创建一个 http 服务器实例 有人告诉我 为了从 Angular 中的服务器端脚本获取数据 需要另一个本地主机 在 ngOnInit 中我获取数据 ngOnInit
  • Encoding.ASCII 在 Silverlight 中不可用 有替代方案吗?

    我有以下 Windows 窗体应用程序代码行 return Encoding ASCII GetBytes chars ToArray 这条线工作得很好 但今天我在 Windows Phone Silverlight 框架上尝试我的代码 并
  • EXCEL VBA,手动 Outlook 电子邮件发送器,类模块问题

    我仍在研究我在我的文章中描述的问题第一个问题关于这个话题 对于短暂刷新 它是一个 Excel 文件 其中包含电子邮件模板和附件的列表 我向每个列表单元添加了打开给定单元模板的按钮 进行一些更改 然后附加文件并将邮件显示到用户 用户可以根据需
  • 如何检查 C# 中的库 (dll) 是否可用?

    在调用库 dll 之前 如何检查它在运行时是否可用 The 应用程序域 AssemblyLoad and AppDomain AssemblyResolve事件分别发生在加载和加载失败时 如果处理这些事件 您可以确定哪些程序集已加载 哪些程
  • 用 java 8 foreach 替换 for 循环来更新值

    我希望用优雅的 java 8 流或 lambda 解决方案替换以下 for 循环 有没有什么简洁高效的东西 public static void main String args ArrayList
  • Hive tez执行错误

    我正在运行配置单元查询 在设置 hive execution engine tez 时出现以下错误 而查询在 engine MR 下工作 FAILED Execution Error return code 1 from org apach
  • 如何使用 PowerShell 脚本运行 Terraform CLI 并传递映射类型的变量?

    Terraform 文件中的变量 infrastructure tf 声明如下 variable tags type map string 这是执行以下命令的 PowerShell 代码terraform命令行程序plan命令 comman
  • 应用程序从应用程序托盘中删除后,服务的进程被杀死

    当活动启动时 我正在启动服务 或重新启动正在运行的服务 使用 Intent intent new Intent this MyService class startService intent 稍后 基于某些操作 相同的活动使用以下方式绑定
  • 如果其他工作簿关闭,公式不会更新

    我有下面的公式 它引用同一文件夹中的另一个工作簿 但是当文件打开时它工作正常 问题是当另一个 Excel 文件关闭时 因为公式不会更新 另一个工作簿打开时的公式 IFERROR COUNTIFS Auto Zero xlsx MonthDB
  • 获取从 Moment.js 到 ISOString 的意外时间偏移

    我正在尝试标准化ISO 8601 日期格式 string 来自 Moment js 但我没有得到我期望的结果 瞬间的toISOString 方法给我一个带有 17 小时偏移量的输出 而不是午夜 var mom moment 23 11 20
  • 删除鼠标悬停 Google Chart 上的自定义工具提示

    我正在使用时间线谷歌图表 基于此question 我试图添加仅当鼠标移出工具提示时删除工具提示的功能 我的下面的函数成功地将其删除一次 但随后抛出错误 此外 我希望它仅在鼠标移出工具提示后才被删除 google visualization
  • ANTLR:带参数的规则?

    我是 ANTLR 新手 我开始探索 ANTLR 教程 我见过为特定规则定义返回类型的示例 请参见下面的示例 我也可以将参数传递给规则吗 我只是在心里想 我想根据提供给它的论据来改变特定状态下的规则行为 如果在 ANTLR 中可行 请帮助我