我对编写汇编器的概念非常陌生,即使在阅读了大量材料之后,我仍然很难理解几个概念。
将源文件实际分解为令牌的过程是什么?我相信这个过程称为词法分析,我已经到处搜索有意义的真实代码示例,但我找不到如此简单的代码示例,非常受欢迎;)
-
解析时,信息是否需要在树上向上或向下传递?我问的原因如下,取:
LD BC,nn
一旦标记化,它需要变成以下解析树(???)
___ LD ___
| |
BC nn
现在,当遍历这棵树时,它需要生成以下机器代码:
01 n n
如果指令是:
LD DE,nn
那么输出需要是:
11 n n
这意味着它提出了一个问题,LD 节点是否根据操作数返回不同的内容,或者是操作数返回某些内容?这是如何实现的?如果时间允许的话,更简单的代码示例将非常好。
我最感兴趣的是在这里学习一些原始流程,而不是查看先进的现有工具,因此在将我发送到之前请记住这一点Yacc https://en.wikipedia.org/wiki/Yacc or Flex https://en.wikipedia.org/wiki/Flex_(lexical_analyser_generator).
好吧,你真正想要的树的结构
对寄存器和存储器进行操作的指令
涉及偏移位移和索引寄存器的寻址模式
看起来像这样:
INSTRUCTION-----+
| | |
OPCODE REG OPERAND
| |
OFFSET INDEXREG
是的,您想要在树中上下传递值。
正式指定此类值传递的方法称为
“属性语法”,你可以为你的属性装饰语法
语言(在你的情况下,你的汇编语法)与值传递
以及对这些值的计算。如需了解更多背景信息,
看属性语法的维基百科 http://en.wikipedia.org/wiki/Attribute_grammar.
In a 你问的相关问题 https://stackoverflow.com/questions/1317256/z80-asm-bnf-structure-im-am-on-the-right-track,我讨论了一个
工具,DMS http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html,
它处理表达式语法和构建树。作为
语言操作工具,DMS 面临着完全相同的上下
树信息流问题。你不应该感到惊讶,
作为高端语言操作工具,它可以处理
直接进行属性语法计算。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)