首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从简单的编程指令生成抽象机器代码

从简单的编程指令生成抽象机器代码
EN

Stack Overflow用户
提问于 2017-01-28 12:30:34
回答 2查看 231关注 0票数 0

我的问题是,我需要学习什么来完成这项任务,...the的任务是根据简单的编程指令创建自动代码生成器,如

代码语言:javascript
复制
(x:=5-z; while x<z do (x:=x*2; z:=z+x) ) 

并把它翻译成抽象机器。

代码语言:javascript
复制
PUSH-5:FETCH-z:SUB:STORE-x: LOOP ...etc....

所以我的问题is...Where开始了吗??,我需要一些解析器,解析器必须使用一些XML ..but,我真的不知道如何定义..but。

请帮助从哪里开始..thanks ..。

我将在中编写它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-28 12:39:52

如果您知道所支持的语法,那么实现您自己的解析器就不难了。按char解析字符串char,通过下一个运算符或空白检测运算符、文字终止或变量名称结尾,并获取先前存储的字符作为令牌。标识标记的类型,并在Java中构建面向对象的模型。一旦您有了一个面向对象的表达式模型,您就可以使用例如访问者模式来漂亮地打印、评估甚至翻译成机器代码,这取决于您的访问者实现。

(从角度来看:从您的问题来看,不清楚这个解析器如何处理XML.)

几年前,我实现了这样一个解析器,用于计算此类表达式(但尚未转换为机器代码)。我的旧计划可以让你知道我是如何解决这个任务的。

票数 1
EN

Stack Overflow用户

发布于 2017-01-28 15:20:42

你需要读几本关于编译器编写的书。这个问题对StackOverflow来说太大了--首先,如果不知道你有多少计算机科学知识,就不可能回答这个问题(例如,你了解堆栈和有限状态自动机吗?)

这一领域的经典著作是Aho和Ullmann,它现在已经很古老了,但老实说,基本思想并没有发生太大的变化,我仍然使用它。

基本步骤是:

  1. 指定要实现的编程语言的语法和语义。(随后的一些细节将取决于它是哪种语言,例如它是程序性的还是声明式的,以及它具有何种类型的系统;但是编译器的总体结构仍然是一样的)。
  2. 为这种语言实现一个解析器(和标记器),它将源代码的表示构造为表达式树。
  3. 编写大量的测试用例。(有些人会说,您应该更早地这样做,但我自己的偏好是编写一个测试用例,然后编写足够的代码来通过测试,然后编写更多的测试。)
  4. 实现语义阶段,负责绑定变量和函数名以及类型检查等任务。
  5. 在这个阶段,我建议为语言编写一个解释器,因为这比编写代码生成器更容易,它将帮助您验证前几个阶段是否正常工作。
  6. 在编写代码生成器之前,您需要(a)为正在获取的(虚拟)机器代码制定规范,(b)为运行时内存管理进行设计:如何分配堆栈空间和堆空间,以及如何进行垃圾收集?
  7. 编写代码生成器。一开始尽量简单,让它对所有测试用例都有效,然后考虑优化。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41909809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档