C语言简单子集编译器详细设计书(第一版)

本文详细介绍了C语言简单子集的编译器设计,包括预处理器去除注释,词法语法分析器生成语法树及异常处理,语义分析和汇编码生成。在Windows下生成MASM汇编码,Linux下生成AT&T汇编码,并提供了MASM和AT&T的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 预处理器
1.1) 去除注释
     逐行读取源码文件xxx.c到缓存中,凡是遇到‘\\’,就将它和后续字符清空。将缓存字符串逐行写入文件xxx.c.tmp。


2. 词法语法分析器
2.1) 处理流程
     按照《C语言简单子集编译器功能设计书》第二章基本语法,生成语法树。
  2.2) 语法树结构
     参照scmpstx.h中所定义的数据结构。
  2.3) DEBUG
     将生成的语法树写入文件xxx.c.stx。
  2.4) 异常处理
     遇到语法、词法错误时,统一报如下异常:
     Syntax error at line @1. @2
     其中参数@1为行号,参数@2为详细出错信息。
  2.5) 内存管理
     使用动态内存的函数必须在退出函数时释放内存。
     全局作用域的动态内存(标志符表和语法树)使用如下配对函数进行申请和释放:
            initialize_XXX()   release_XXX()


3. 语义分析、汇编码生成器
在Windows下生成MASM汇编码,在Linux下生成AT&T汇编码。
[ MASM ]
  3.1) 汇编码的组织
     3.1.1) 头部
        使用如下固定内容:
        .MODEL SMALL
        .STACK 4096h
        INCLUDE PrintVal.mac
     3.1.2) 数据部
        使用如下模式:
        .DATA
        A  DW  0
       Name_A DB ‘A’,20H,20H
        B  DW  0
       Name_B DB ‘B’,20H,20H
     3.1.3) 代码部
        .CODE
        CALL Main
        Sub1 PROC
        …
        Sub1 ENDP
        …
        Main PROC
        …
        Main ENDP
        END Main
  3.2) 汇编码生成流程
     (1) 生成头部固定代码。
     (2) 生成数据部。遍历IdTable,生成所有变量的定义代码。生成变量名字符串Name_XXX。
  &nbs

华中科技大学 编译原理 面向过程的C语言编译器设计 功能包括:词法分析和语法分析、语义分析、中间代码生成的 源码 题目:c--语言编译器设计与实现(请为自己的编译器命名) 源语言定义:或采用教材中Decaf语言,或采用C语言(或C++语言或C#语言或JAVA语言)部分关键语法规则。源语言要求至少包含的语言成分如下: 数据类型至少包括char类型、int类型和float类型 基本运算至少包括算术运算、比较运算、自增自减运算和复合赋值运算 控制语句至少包括if语句和while语句 实验内容:完整可运行的自定义语言编译器 实验一:词法语法分析器的设计与实现:建议使用词法语法生成工具如:LEX/FLEX ,YACC/BISON等专业工具完成。 实验二:符号表的设计与属性计算:设计符号表数据结构和关键管理功能。动态展现符号表变化过程。无论语法分析使用工具还是自己设计,都必须对符号表进行设计和管理,属性计算可以语义子程序实现。 实验三:语义分析和中间代码生成:生成抽象语法树,进行语义分析,实现类型检查和控制语句目标地址计算,生成中间代码。中间代码的形式可以采用不同形式,但实验中要求定义自己的中间形式。 实验四:目标代码生成:在前三个实验的基础上实现目标代码生成。也可以使用工具如LLVM来生成目标代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值