语言词法分析器和C语言语法分析器编译原理课程设计
《编译原理课程设计》课程报告
题目 C语言词法分析器和C-语言语法分析器
学生姓名
学生学号
指导教师
提交报告时间 2019 年 6 月 8 日
C语言词法分析器C语言词法
掌握构造DFA的过程
掌握利用DFA实现C语言的词法分析器
理解编译器词法分析的工作原理
2 词法特点及正则表达式
2.1词法特点
2.1.1 保留字
AUTO, BREAK , CASE , CHAR , CONST ,
CONTINUE , DEFAULT , DO , DOUBLE , ELSE,
ENUM , EXTERN , FLOAT , FOR , GOTO,
IF , INT , LONG , REGISTER , RETURN,
SHORT , SIGNED , SIZEOF , STATIC , STRUCT ,
SWITCH , TYPEDEF , UNION , UNSIGNED , VOID,
VOLATILE , WHILE,
2.1.2 符号
+ - * / ++ -- += -= *= < <= > >= == != = ; , ( ) [ ] { } /* */ :
2.2 正则表达式
whitespace = (newline|blank|tab|comment)+
digit=0|..|9
nat=digit+
signedNat=(+|-)?nat
NUM=signedNat(“.”nat)?
letter = a|..|z|A|..|Z
ID = letter(letter|digit|“_”)+
CHAR = 'other+' STRING = “other+”
3 Token定义
3.1 token类型
保留字auto break case char const continue default do double elseenum extern float for gotoif int long redisterreturnshort signed sizeof static struct switch typedef union unsignedvoid volatile while特殊符号+ - * / ++ -- += -= *= < <= > >= == != = ; , ( ) [ ] { } /* */ :文件结束、错误EOF ERROR其它tokenNUM ID CHARACTER STRING
3.2 tokenType类型代码
4 DFA设计
4.1 注释的DFA设计
注释的DFA如下所示,一共分为5个状态,在开始状态1时,如果输入的字符为/,
则进入状态2,此时有可能进入注释状态,如果在状态2时,输入的字符为*,则进入注释状态,状态将转到3,如果在状态3时,输入的字符为*,则有可能结束注释状态,此时状态将转到状态4,如果在状态4时输入的字符为/,则注释状态结束,状态转移到结束状态。
4.2 词法分析的DFA设计
词法分析的DFA如下所示,一共分为10个状态:START、INNUM、INNUM1、INNUM2、INID、INCOMPARE、INOPERATE、INSTRING、INCHAR、DONE。状态START表示开始状态,状态INNUM,INNUM1,INNUM2表示数字类型(NUM)Token的状态,状态INID表示标示符(ID)类型Token的状态,状态INOPERATE表示算数运算符型Token的状态,状态INOCOMPARE表示比较运算符型Token的状态,INSTRING表示字符串(STRING)类型Token的状态,INCHAR表示字符(CHAR