将 Antlr 语法树转换为有用的对象

2024-02-10

我目前正在考虑如何最好地获取使用 Antlr 生成的 AST,并将其转换为可以在我的程序中使用的有用对象。

我语法的目的(除了学习之外)是创建一种可执行(运行时解释)语言。

例如,我将如何获取属性子树并实例化特定的属性类。例如。

以下代码用我的语言表示:

Print(message:"Hello stackoverflow")

将产生以下 AST:

我目前的想法是工厂类可以读取树,提取名称(message),然后输入(STRING) 价值(”Hello stackoverflow现在,知道了类型,我可以实例化正确的类(例如 StringAttribute 类)并传入所需的属性数据 -name and value.

相同的方法可用于定义工厂,提取定义名称(Print),实例化Print类,然后传入属性工厂生成的属性。

对于更复杂的程序,事情确实会变得更复杂:

Program(args:[1,2,3,4,5])
{
    If(isTrue:IsInArray(array:{Program.args} value:5))
    {
        Then {
            Print(message:"5 is in the array")
        } Else {
            Print(message:"More complex " + "message")
        }
    }
}

非常欢迎任何/所有帮助或想法。非常感谢。

我之前提出的相关问题(可能有用):

  1. 我如何制作一棵树 解析器 https://stackoverflow.com/questions/2061166/how-do-i-make-a-treeparser-in-antrl3/2061277#2061277
  2. 解决LL递归问题 https://stackoverflow.com/questions/2113703/antlr-left-recursive-problem/2117334#2117334
  3. Antrl3条件树重写 https://stackoverflow.com/questions/2129569/antrl3-conditional-tree-rewrites/2136770#2136770

我建议阅读第9章,培养高水平口译员, from 语言实现模式 http://www.pragprog.com/titles/tpdsl/language-implementation-patterns作者:特伦斯·帕尔

EDIT

好的,为了让您度过等待那本书的时间,您(至少)需要以下内容:

  • 全局内存空间;
  • 函数空间(每个函数空间还将有一个(本地)内存空间);

以及脑海中浮现的课程(在UML-ish style):

  • class Interpreter
    • 全局:内存空间
    • 函数:堆栈
    • ...

  • class MemorySpace
    • 变量:Map
    • ...

  • class Function
    • local:内存空间
    • 执行():无效
    • ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Antlr 语法树转换为有用的对象 的相关文章

  • 光学标记阅读器的开源库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想要一个用于光学标记读取 OMR 的开源库 有这样的库吗 我想在我的 java 应用程序中使用这个库 zxing 可能对你有用 http
  • 使用 Jersey Client 忽略自签名 ssl 证书 [重复]

    这个问题在这里已经有答案了 我正在使用 Jersey 客户端库对 jboss 上运行的其余服务运行测试 我使用自签名证书在服务器上正确设置了 https 在本地主机上运行 但是 每当我使用 https url 运行测试时 都会收到以下错误
  • 检索和设置 IntelliJ IDEA 插件开发的拆分窗口设置

    我正在编写一个 IntelliJ IDEA 插件 用于保存打开选项卡的会话 称为选项卡会话 https github com alp82 idea tabsession 这个问题是后续问题IntelliJ IDEA 插件开发 保存选项卡组
  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • 无法让远程 EJB 与 Wildfly 上的 EJB 客户端 API 配合使用

    我目前正在努力让远程 EJB 调用在 wildfly 8 x 和 9 x 上工作 详细来说 它是关于使用 EJB 客户端 API 方法从独立客户端应用程序 而不是从另一个应用程序服务器 进行远程调用 远程命名方法适用于我 但不适用于我的场景
  • Infinispan 复制缓存不复制对象以供读取

    我们正在尝试在 Openshift 内的 Wildfly 11 上运行的两个 infinispan 节点上安装复制缓存 当我们在一个节点上写入一个对象时 它不会显示在另一节点上进行读取 启动时 节点在集群中连接 并且可以看到彼此 如日志中所
  • 寻找 WebElements,最佳实践

    在我们当前的自动化 使用 Selenium WebDriver Java 中 我们使用 FindBy very广泛地 例如 FindBy css a name bcrumb protected List
  • 如何使用 Gradle 2.10 将 ANTLR 词法分析器语法导入到另一个语法中?

    我一直在和 Terence Parr 一起学习 ANTLR 4权威的 ANTLR 4 参考 到目前为止我一直在使用 Gradle 2 10 及其内置 ANTLR 插件进行跟踪 然而 我在获取一些我从第 4 章第 38 41 页改编的代码以使
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • 如何加快 jar 签名者的速度?

    我使用 ant 来签署我的 jars 以进行网络启动部署 Ant signjar 在 Web 启动签名时非常慢 如何加快签名过程 我找到了一种可能的解决方案 早些时候 在构建脚本 ant signjar 中 按顺序调用所有 jar 我们使用
  • 使用 eclipse 配置mockito 时出现问题。给出错误:java.lang.verifyError

    当我将我的mockito库添加到类路径中 并使用一个简单的mockito示例进行测试时 我尝试使用模拟对象为函数add返回错误的值 我得到java lang verifyerror 以下是用于测试的代码 后面是 logcat Test pu
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog
  • jsf 中的类型未找到属性

    我正在尝试调用 jsf 中使用 primefaces 的属性 但我有错误 500 在托管bean PersonelBean 类型上找不到 我正在使用 hibernate jsf 和 spring PersonelBean java Mana
  • 使用 Mockitos 传递参数化输入

    我正在使用 Mockito 进行单元测试 我想知道是否可以使用 Junit 测试中的方式发送参数化输入参数 e g InjectMocks MockClass mockClass new MockClass Test public void
  • 如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

    我有一个 Spring 3 JPA 2 0 应用程序 在我的 Controller我需要一个初始化的对象 但我有代理 我需要能够以编程方式初始化它 我需要类似的功能org hibernate Hibernate initialize Obj
  • 我们可以用java定制一个垃圾收集器吗?

    我们知道java的垃圾收集器是一个低优先级线程 在java中我们可以创建任何具有高优先级的线程 那么是否有可能拥有我们自己定制的具有可变优先级的垃圾收集器线程 我们可以根据内存管理的级别进行设置 有人尝试过吗 如果是的话 您能分享一些关于如
  • servlet 如何获取 servlet 之外的文件的绝对路径?

    我们一直在使用 System getProperties user dir 来获取属性文件的位置 现在它已经部署在 Tomcat 上 通过 servlet 系统调用将位置指定为 tomcat 而不是属性文件所在的位置 我们如何动态调用属性文
  • Java 中的可迭代求和?

    有没有一个库可以做到这一点 public class Iterables private Iterables public static
  • JBoss 5 截断 base64 cookie 字符串的尾部 =

    从 JBoss 4 升级到 JBoss 5 后 我注意到最烦人的回归 它截断 base64 cookie 值的尾部等号 我花了很长时间才明白问题不是我的代码而是 JBoss 的 我用 google 搜索了一下 发现这是一个已知的问题issu
  • 在测试期间调用预定方法[重复]

    这个问题在这里已经有答案了 我正在使用 Maven 开发 SpringBoot 应用程序 我有一个班级 Component有方法的注释m与 Scheduled initialDelay 1000 fixedDelay 5000 注解 这里f

随机推荐

  • Google Spreadsheet API v4 使用“ApiKey”在电子表格中“添加行”

    我正在尝试使用 Google Spreadsheet API v4 直接使用 ApiKey 在电子表格中 添加行 而不使用 OAuth 2 0 如果我使用 OAuth 2 0 它成功 添加行 但我的要求是使用 ApiKey 参考了这个网址
  • django-auth-ldap 身份验证失败

    我正在尝试使用Django Auth Ldap https pythonhosted org django auth ldap 在我的项目 Django 1 6 Python 2 7 中 但它不起作用 我的活动目录模式是 我已经通过安装 l
  • 将 Catalyst 应用程序部署到生产服务器的最佳实践是什么?

    将 Catalyst 应用程序部署到生产服务器的好方法是什么 目前 我只是在存储库的根目录中有一个 FastCGI 调度脚本 当我想要更新服务器代码时 我将分支推送到服务器 这很简单 但并不完美 如果代码在服务器计算机上的测试失败 例如由于
  • 在 cookie 中设置 Django REST Framework JWT

    我在用djangorestframework jwt https github com GetBlimp django rest framework jwt对用户进行身份验证 我已经覆盖了内置的JSONWebTokenAPIView也在响应
  • 如何使用数据表和服务器端处理进行自定义过滤

    我在用数据表 http datatables net在我的 Web 应用程序中显示表格数据 并将其配置为使用服务器端处理 http datatables net usage server side 即通过 AJAX 查询服务器以获取过滤后的
  • 如果 .Create() 无法实例化,它应该返回空对象、null 还是抛出异常?

    我希望能够使用这种代码实例化应用程序中的任何对象 SmartForm smartForm SmartForm Create id 23 Customer customer Customer Create id 222 我现在正在讨论如果该对
  • 如何让 tcpdump 写入文件并标准输出适当的数据? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我希望有tcpdump将原始数据包数据写入文件中 并在捕获数据包时将数据包分析显示到标准输出中 通过分析 我的意思是它通常显示的行 w
  • 如何消除特定页面的顺风预战

    里面有一个选项tailwind config cjs关闭预检 但我不想在整个项目中关闭它们 我需要为某些特定页面启用它们 有没有办法做到这一点 关闭预检 tailwind config cjs corePlugins preflight f
  • Pymongo $in 查询不起作用

    在 Pymongo 中看到一些奇怪的行为 in询问 查找满足以下查询的记录 speciesCollection find SPCOMNAME in paddlefish lake sturgeon 查询没有返回任何记录 如果我将其更改为 f
  • 如何使用javascript在IE中的表单中设置文本区域值

    如果是 Firefox 我可以使用它在表单 提交问题 中设置文本区域 selectedtext 值 但在 IE 中失败 document submitquestion selectedtext value txt 这应该有效
  • 通过 Excel 的 eDrawings API

    我正在尝试通过 Excel 使用 edrawings VBA api 我已经下载了 edrawings SDK 似乎 api 仅通过用户表单运行 我通过 Excel 为 SolidWorks 制作了一些 VBA 宏 但与 SolidWork
  • AWS S3 存储桶“404 未找到”

    目前我正在托管一个捆绑包Angular 2应用程序在AWS S3 bucket 所以它只包含 html and js files 绝对路径http example com 确实有效 但如果我切换到任何链接 例如http example co
  • 无法关闭 TCP_NODELAY

    我正在使用 Boost asio 发送 TCP 消息 我设置了 NO DELAY 选项 因为这是一个 实时 控制系统 我看到使用 Wireshark 在消息中设置了 PSH 标志 我对它的表现很满意 它正在按预期工作 出于兴趣 我决定关闭
  • 模拟输入:按键按下、按住和释放

    我试图模拟用户按下某个键 按住某个键一段特定的时间间隔 然后释放它 我尝试使用来实现这个SendKeys Send 但我不知道如何控制按键的持续时间 我不想一遍又一遍地发送相同的密钥 我想要一个按键按下和一个按键弹起事件 例如 我有这样的代
  • 在同一个 ios 项目中使用 2 个版本的 AFNetworking

    我有一个项目 我使用了 AFNetworking 2 0 不是可可豆荚 刚刚添加到项目中 然后 我实现了日历 MSCollectionViewCalendarLayout 它在 pod 中打包了一些依赖项 其中之一是 RestKit gt
  • 如何通过 aot 编译在 Angular 中提供备用 i18n 语言链接?

    我目前正在开发 Angular 应用程序的 i18n 我使用 AOT 编译 xlf 文件来创建预编译的应用程序 如下所述here https angular io docs ts latest cookbook i18n html 在构建中
  • jQuery $(document).ready 在 Iron/Chrome 中损坏

    我使用 jQuery 和 jFancyTiles 编写了一个小图像幻灯片 可以在此处看到 http www netzwerkag at http www netzwerkag at 它在 Firefox 和 IE 中按预期工作 但在 Iro
  • Google Chart:如何绘制条形图的垂直线

    我正在尝试添加一条垂直线 以便当元素超过该值时可以在视觉上有所区别 Thanks
  • DatePickerDialog标题背景颜色

    我已经为 DatePickerDialog 背景设置了样式 它在 Nexus 5 Marshmallow 上的显示有所不同 我使用的风格是
  • 将 Antlr 语法树转换为有用的对象

    我目前正在考虑如何最好地获取使用 Antlr 生成的 AST 并将其转换为可以在我的程序中使用的有用对象 我语法的目的 除了学习之外 是创建一种可执行 运行时解释 语言 例如 我将如何获取属性子树并实例化特定的属性类 例如 以下代码用我的语