compiler-design相关内容

制作汇编器的设计模式

我正在制作一个8051汇编器。 在所有的内容都是一个读取下一个令牌的tokenizer之前,设置错误标志,识别EOF等。 然后是编译器的主循环,它读取下一个令牌并检查有效的助记符: mnemonic = NextToken ); if(mnemonic.Error) { //抛出一些错误 } else if(mnemonic.Text ==“ADD”) { . ..

如何编码FIRST& FOLLOW设置在编译器内部

我正在编写一个编译器设计课程,我正在采取的,我目前在语法分析,我需要写一个解析器。 我需要使用FIRST和FOLLOW集合来处理源文本中可能出现的任何错误。我已经为我的语法中的所有非终端预先计算了FIRST和FOLLOW集合,但我有麻烦决定我应该在我的程序中实际编码他们的位置。 我应该将它们放在地图中,其中键是非终端的名称吗? 任何建议都是有用的 这篇文章可能有点不清楚,如 ..

如何使用标记工作?

我已经在互联网上搜索过,但找不到正确的解释,了解如何使用backpatching。 您能解释一下我的backpatching是如何工作的? 我知道它有两种主要的标记类型: 下一个四元组 下一个列表 我找到此代码,其中正在接受输入文件并使用RISKI语言创建文件。 在他们的第一个卷中,他们有: 程序:N FUNCTION M MAIN_FUNCTION ..

左因子分解与左向递归的区别

左因子和左循环之间有什么区别?我理解左因子分解是一种自顶向下的解析技术。但是当我听到这两个术语时,我很困惑。 解决方案 左因子分解是去除了两个生成中常见的左因子相同的非终端。这是为了避免解析器的回溯。假设解析器具有前瞻性,考虑这个例子 - A - > qB | qC 其中A,B,C是非终端,q是一个句子。 在这种情况下,解析器将被混淆,选择两个产品中的哪一个,它可能必须回溯。 ..

编译器测试用例或如何测试编译器

编译器与所有软件一样,也容易出现错误和逻辑错误。 如何验证编译器生成的输出。通常,我的问题是 如何验证生成的机器代码是否正确? li> 如何确保生成的机器代码符合语言规范。 只是选择一个开源项目(在C中,如果还在C中编写一个编译器)只是通过“编译器”编译它。在这种情况下,如何判断编译器是如预期的行为。 语言标准委员会提供的任何正式的测试用例(文献)是“符合语言”编译器 ..
发布时间:2016-12-22 20:47:41 其他开发

第一个编译器是如何编写的?

我听说鸡肉和鸡蛋和自慰。我有几个问题。 是什么编写了第一个将某些东西转换为二进制指令的编译器? 编译或翻译成二进制指令? ...我很难相信他们用二进制编写了一个编译器。 这个用于6039微处理器,例如),它们用匹配的汇编指令列出它们,并且为诸如跳转之类的事情手动确定存储器地址/偏移。 第一个程序是以这种方式完成的 - 手写的操作码。 但是,大多数时候,使用汇编器“编 ..

什么时候可以返回不同的type_info实例为同一类型?

Andrei Alexandrescu 在现代C ++设计: typeid 返回的对象有 静态存储,因此您不必担心 担心生命周期 Andrei继续: 该标准不保证 每次调用,例如 typeid(int) 返回一个引用 type_info object。 即使标准不能保证这一点,常见的编译器,如GCC和Visual Studio? 假设 typeid 调用), ..
发布时间:2016-10-14 10:48:08 C/C++开发