问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

汇编语言编译器是怎么编写的

发布网友 发布时间:2022-04-19 00:57

我来回答

6个回答

懂视网 时间:2022-04-19 05:19

YACC for ansi C 的文法在很多地方都可以找到了。为什么没有Python的?如何把Python源代码中的grammar编译成yacc的?

回复内容:

理论上是可以的,关键点在于您要在Lexer和Parser之间要多加一层,用于分析哪些地方是进入缩进,哪些地方是退出缩进。然后匹配到缩进的时候插入INDENT和DEDENT这样的Token。

至于分析的方法,您可以先建一个Stack来存放每一层缩进块的Token,
然后根据Lexer送来的Token中的行号、列号等信息来和Stack栈顶的数据进行对比,
判断下来是该进入缩进的就push一个INDENT,并这个INDENT插入到输出的Token流中。
发现是Stack中旧的Token匹配的,就把之前的缩进块pop出来,并在输出的Token流中插入DEDENT。

然后在Paser层面处理语句块的时候可以这样处理(我只写大概意思的伪码,具体您自己看着办)
block ::= INDENT NLS statements NLS DEDENT
if ::= IF LPAREN expression RPAREN COLON block

1:python这种靠缩进的语言的文法其实是上下文有关的,EBNF是表达不出来的,我不知道yacc是不是有什么丧心病狂的扩展来给你做这个。

2:每一行前面的tab的数量你不要看成一堆tab,要把他的数量本身看成一个整体,也就是说再作语法分析的时候其实是:


[0]def fuck
[1]if true:
[2]fuck
[1]else:
[2]shit

[0]def shit
..
主要是缩进语法的问题吧,只要先在词法上把python的缩进改成类似大括号分界的语法即可,压力在lex这边
cpython源码的token分析是用C手撸的,超长,可以看看源码 补充一下 @vczh ,因为是上下文有关的,所以Yacc是不行的,不过我通过 peg, ometa 解决什么问题,ometa-js怎么入门/正确理解和认知? 这个问题知道 PEG 适合进行。

pyPEG 这个项目的主页,底下就有对缩进的分析,可以参考一下。 我用C语言实现过一个简化的python解释器,用yacc来分析python的思路如下:
1. 在源程序中插入两个虚拟的TOKEN:TOKEN_BEGIN和TOKEN_END
TOKEN_BEGIN标志语法块的开始,TOKEN_END标志语法块的结束。看一个例子:
while i < 100:
 print i
 i += 1 
还不如直接看python源码里的interpreter好了。 COOL都日出来了,python算个DIAO啊,文法拿去,玩吧。写完了我们膜拜一下。
https://github.com/python-git/python/blob/master/Grammar/Grammar

热心网友 时间:2022-04-19 02:27

编译器自举!搜索这个关键字
程序都是编译器编译的。这个是肯定的
至于第一款X语言编译器是不是直接1010101010自己写的那就不知道啦

一般开发编译器的话。有两条路选择
1.利用yacc(或者其变种)&lex(词法分析)-等工具自己生成语法模板
词法语法都可以使用这些工具自己生成
然后自己编写生成的中间码和生成的机器码就可以了
一般做编译原理类似试验都是如此的。许多编译器也的确是这样

2.自己写词法分析和语法分析。可以参考一些开源的编译器
lcc-这个是ANSI C99标准的编译器是开源的
或者nasm,watcom等编译器到www.sf.net上不少开源的编译器

总的来说。高级语言编译器比较难写
如果想快速写出一个的话
可以采用第一种做法。利用工具生成语法词法模板
先写一个简单的汇编编译器比较简单
开源的有nasm,jwasm(支持masm语法开源的编译器)
http://www.japheth.de/JWasm.html
fasm(这款编译器是自举的.就是自己可以编译自己),
http://flatassembler.net/

剩下的就是自己做好语言规则关键字map
引用高手的话。语言map做好了你的编译器也做好一半了
剩下的都是机械性的工作了。
生成x86或者arm指令。

优化工作这个很难解释.根据你所需要的做吧
毕竟可以做出一个无错,又XX的编译器已经很难得

你可以选择使用现有的编译器开发自己的编译器
然后等到你的编译器支持相当数量指令和成熟度的时候
使用自己的语法重新写一遍编译器.
这样你就可以用自己的编译器开发自己的编译器了(是不是很*?)

另外举几个例子
Delphi的编译器是C++ Builder开发的。
而C++ Builder的IDE是Delphi开发的
C++ Builder的编译器是C++ Builder开发的-这个就是编译器自举了。。Delphi和C++ Builder共享一个后端化优化器。
Delphi 早期的版本的编译器是tasm直接编译的。可见Anders的汇编功力多强悍(Anders也就是后来VJ++,C#,.NET工程的核心架构师.最关键的灵魂级人物)

VC++的编译器是VC++开发的。很明显这都说明了编译器自举
自己开发自己。如果一个编译器可以做到自己编译自己。那基本上就可以实现任何功能了。

关于编译器开发的书籍可以看一下
龙书《编译原理(第二版)》
虎书《现代编译原理-C语言描述》
鲸书《高级编译器设计与实现》
建议从鲸书看起。然后是龙书
再来是虎书--虎书里面描述了许多现代编译器(正如其名)技术
例如面向对象啦,优化,垃圾回收等等.
鲸书看完基本上就可以实现一个简单的Tiny C编译器了
然后在龙书巩固,读一下语言规范,自己看一些开源的汇编编译器代码
自己就可以尝试做一个汇编语言编译器了.等到技术提高了
在尝试做一些高级语法识别,参考LCC代码做一下ANSI C99的
C语言编译器。再来就看你自己的兴趣和领悟度拉
如果想支持C++的话就得要对编译器做许多方便的研究

类似Java那种跨平台或者Ruby,Python等动态语言
虎书中也有描述。当然看自己功力了

热心网友 时间:2022-04-19 03:45

最开始的编译器是机器语言写的,然后写出来支持部分之后,就可以用这部分继续编译其他部分的。

热心网友 时间:2022-04-19 05:19

怎么说呢,能写编译器的都是大牛了---
我认为是根据一定规则,(不是有编译原理的理论吗),结合硬件与汇编语言--对应指令有对应的翻译过程

热心网友 时间:2022-04-19 07:11

  汇编编译器:把汇编语言源程序转换为机器语言的程序,汇编编译器也可以生成源代码列表文件,其中包括行号,内存地址,源代码语句,程序中使用的符号及变量,交叉引用列表.

  在Windows/Dos 下可用的汇编编译器有Microsoft宏汇编编译器MASM,Borland Turbo Assember(TASM)和The NetWide Assembler(NASM),其中NASM是跨平台的编译器可用于Windows/Dos/Linux下.他们的语法相近,都是Intel语法风格. 在Linux下可用的汇编编译器有NASM,gas.NASM和gas的语法风格相去甚远,NASM使用的是Intel 语法风格的汇编语法,而gas使用的是AT&T的汇编语法风格.
  

热心网友 时间:2022-04-19 09:19

用汇编写的 给你个网站
www.aogosoft.com
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...的话有啥影响,怎么听说对六年后换证有影响? ...重新刷学时吗,科一科二科三科四可以转校吗? 考完科一科二科三科四要多久 ...但是科目三的学时没有打满对以后有没有影响? 我的学时卡没有打过,一点都没有,不过我科一科二科三科四都全部考完了... 五行穿搭2021年10月8日五行属什么怎么穿衣 十月八日上到十月几日 ipadmini和iphone6是充电器不一样、还是数据线不一样呢?可以互相使用充 ... iphone6的插头可以通用ipad mini 吗 iphone6和ipad mini的充电器可以通用吗 太阳能和光能的区别是什么? 太阳能和太阳的光能一样吗? 现在的MP4播放器都支持什么格式的视频? 姜粒,白醋,白酒,封肚脐上可以减肥是么 想用生姜白醋白酒放在肚脐减肥管用吗?可以天天用吗? 菊花有哪些器官 菊花的器官名称 现在一说到菊花,你们就知道是什么呢!那么菊花是怎么和性器官联系的? 菊花是什么器官。。。 网上他们说的菊花指的是什么? 现在人说的菊花是指什么 结婚之后老婆不让老公碰会有什么后果? 一个女人为什么不让自己男人碰 老婆不让碰是什么原因 老婆不让老公碰的原因 老婆不让老公碰她这是什么原因 老婆为什么不让老公碰 一个女生不让男人碰是什么原因 女人不想让老公碰是怎么回事 为什么许多女人不让自己的男人碰她? 一个月的婴儿37.3度,算不算发烧,怎么办 gov是什么邮箱?急...... @cdc.gov是哪里的邮箱 女生乳头内陷怎么办 导致女性乳头凹陷的原因? 有些女人的乳头为什么总是凹进去的呢 谁知道女人*凹陷进去是怎么回事.是一种病吗?用什么方法可以消除?谢谢! 我15了,乳头是凸出来的,可我妈说她那时候是凹进去的,正常吗? 19岁女生奶头凹在里面的怎么办 女人的奶头凹进去会怎么样啊 摄像头侧面能看多宽 联想电脑前置摄像头5m是什么意思 这是什么型号的镜头?市场还有3M和5M镜头什么意思? 酷派7295青春版后盖的摄像头下面有一个5M的标识,是什么意思? X8摄像头5M的分辨率在用户感知上有什么明显提升? 我想用无线摄像头录制监控,传输距离要达到1000m,效果达到距离摄像头5m可以看清脸,都需要什么设备??? 怎么将电脑摄像头照片设置小于5M 8GB的小米随身WIFI做无线网卡用,插在家中电脑上,能接收多少mbps速度? 杭州限时停车晚上计时么? 杭州路边停车位 写着8点到17点 19点到7点是什么意思 不是这个时间就不能停吗 周末是不是可以停_百度问一问 为什么小米随身wifi下载东西时只有几百k不是说最高可以下载150兆吗?最次也应该达到三四兆啊,为