书栈网 · BookStack 本次搜索耗时 0.007 秒,为您找到 39 个相关结果.
  • 第01章 概 述

    第01章 概 述 第01章 概 述 编译器是将一种程序(源程序)翻译成另一种程序(目标程序)的计算机程序。本书介绍一个非常简单的编译器( TinyC 编译器)的实现。 TinyC 编译器可将 TinyC 源程序编译成 Linux 下的可执行程序,其编译及运行基本流程如下图,首先利用 TinyC 前端将 TinyC 源程序编译成中间代码 Pcode ...
  • 5.2 变量声明、赋值语句、函数调用语句

    5.2 变量声明、赋值语句、函数调用语句 5.2 变量声明、赋值语句、函数调用语句 变量声明直接将 TinyC 的 int 改成 var 就可以了。 赋值语句的左边为变量名,右边为表达式,先将表达式转换成后缀表达式,再按顺序翻译相应的 Pcode ,最后在加一个 pop var_name: 赋值语句: a = 1 + 2 *...
  • 2.1 数据类型及源程序结构

    2.1 数据类型及源程序结构 2.1 数据类型及源程序结构 TinyC 中变量只有 int 一种数据类型(32位),函数的返回值可以声明为 int 和 void 两种类型,但编译器会自动为 void 函数返回一个 int 值。不支持全局变量,只有局部变量,变量须先声明再使用,且变量声明必须放在函数体的最前面,不支持声明变量的时候赋初值。 不支持函数...
  • 第00章 关于本书

    自己动手写编译器 欢 迎 目 录 版权声明 关于本书 自己动手写编译器 欢 迎 欢迎阅读本书《自己动手写编译器》,本书将介绍一个非常简单的编译器( TinyC 编译器)的实现,用简单和易于实现的实例来描述基本的编译原理及过程,希望能为学习编译原理的读者提供一些参考。 目 录 第01章 概 述 第02章 源程序 TinyC 第0...
  • 5.3 控制和循环语句

    5.3 控制和循环语句 5.3 控制和循环语句 if 和 while 语句利用 jz 和 jmp 命令就可以实现,首先看 if 语句: TinyC: if ( a > 0 ) { print ( "a is a positive number" ); } else { print ( "a is ...
  • 4.4 中间代码 Pcode 总结

    4.4 中间代码 Pcode 总结 4.4 中间代码 Pcode 总结 好了,中间代码 Pcode 、 Pcode 虚拟机和 Pcode 模拟器就讲完了, Pcode 一共才7组命令,都很容易学习,学过计算机系统架构和汇编语言的读者应该很快就能掌握好。熟悉 python 的读者可以先结合这两章对 Pcode 命令和 Pcode 虚拟机的描述阅读一下 ...
  • 第06章 编译器基本流程

    第06章 编译器基本流程 第06章 编译器基本流程 前面我们一共花了 4 章的内容详细介绍了 TinyC 编译器的源程序和中间代码,看起来我们似乎离我们的主题——编译原理——越来越远了。但只有深入的理解了源程序和中间代码的结构,才有可能编制出计算机程序进行编译。经过这 4 章的学习和练习,相信读者心中对 TinyC 前端的内部算法已经有了一个比较模糊...
  • Conditional compilation

    Conditional compilation Conditional compilation // Support for multiple conditions in one branch $if ios || android { println ( 'Running on a mobile device!' ) } ...
  • 第08章 用 flex 做词法分析

    第08章 用 flex 做词法分析 第08章 用 flex 做词法分析 8.1 flex 简介 8.2 使用 flex 对 TinyC 源文件进行词法分析
  • 2.2 数据运算

    2.2 数据运算 2.2 数据运算 TinyC 支持以下算术、比较和逻辑运算: +, -, *, /, %, ==, !=, >, <, >=, <=, &&, ||, !, - 注意上面最后一个 “-” 表示 “反号” ,应和 “减号” 区别开来。 TinyC 不支持 ++ 和...