编译原理课程设计报告
课题名称: C-语言编译器设计
提交文档学生姓名: 李杰
提交文档学生学号: 0743041240
同组 成 员 名 单: 无
指导 教 师 姓 名: 金军
指导教师评阅成绩:
指导教师评阅意见:
提交报告时间: 2010年 6 月 10日
课程设计目标
实验建立C-编译器。只含有scanner和parser部分。
分析与设计
(1)实现方法:
编程语言为C语言。
编程方法:scanner部分根据DFA图用switch-case结构实现状态转换;parser部分用递归下降分析方法实现。
(2)扫描器:
C-惯用的词法
1、语言的关键字:else if int return void while
2、专用符号:+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */
3、其他标记是ID和NUM,通过下列正则表达式定义:
ID = letter letter* NUM = digit digit* letter = a||z|A||Z digit = 0||9
4、空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。
5 注释用通常的C语言符号/ * * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套
各单词的状态转换图(DFA图如下)词法结构见文件"globalsh"中。
(3)分析器:分析树结构见文件"globalsh"中。
C-的BNF语法如下:
(4)代码设计说明:
程序结构:语法分析函数parse通过调用词法分析函数getToken实现语法分析。
文件和函数的设计说明:文件mainc包含相应头文件,及main函数的实现;文件golbalsh包含符号表和分析数的数据结构及在其它文件中使用的变量;文件utilh 和utilc实现与词法分析和语法分析输出相关的函数printToken和printTree,以及分析树节点初始化相关的函数newStmtNode,newExpNode(Expkind)和copyString;文件scanh 和scanc实现词法分析,主要函数为getToken;文件parseh 和parsec实现语法分析,函数为与文法规则对应的函数。
关键数据结构
程序代码实现
文件mainc代码如下:
//实验建立C-编译器。只含有scanner和parser部分。
#include"globalsh"
#include "utilh"
#include "scanh"
#include "parseh"
//全局变量和标志
int lineno=0;
FILE*source;
FILE*listing;
FILE*code;
int EchoSource=TRUE;
int TraceScan=TRUE;
int TraceParse=TRUE;
int Error=FALSE;
int main(int argc,char*argv[])
{
TreeNode*syntaxTree;
char pgm[120]; //代码文件名
if(argc!=2)
{
fprintf(stderr,"usage:%s C:\sourcec \n",argv[0]);
return -1;
}
strcpy(pgm,argv[1]);
if (strchr(pgm,'')==NULL)
{ strcat(pgm,"tny"); }
source=fopen(pgm,"r");
if(source==NULL)
编译原理课程设计C-语言编译器 来自淘豆网m.daumloan.com转载请标明出处.