文档介绍:《编译原理课程设计》课程报告题目 C 语言词法分析器和 C- 语言语法分析器学生姓名学生学号指导教师提交报告时间 2019 年6月8日四川大学《编译原理课程设计》学号 20********** 1 C 语言词法分析器 1 实验目的及意义 1. 熟悉 C 语言词法 2. 掌握构造 DFA 的过程 3. 掌握利用 DFA 实现 C 语言的词法分析器 4. 理解编译器词法分析的工作原理 2 词法特点及正则表达式 词法特点 保留字 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, 符号+-*/ ++ -- += -= *=< <=> >= == !==;,()[]{} /* */: 正则表达式 whitespace = (newline|blank|ment)+ digit=0|..|9 nat=digit+ signedNat=(+|-)?nat NUM=signedNat( “.” nat)? letter = a|..|z|A|..|Z ID= letter(letter|digit| “_”)+ CHAR =' other+ ' STRING =“ other+ ”四川大学《编译原理课程设计》学号 20********** 2 3 Token 定义 token 类型保留字 auto break case char const continue default do double else enum extern float for goto if int long redister return short signed sizeof static struct switch typedef union unsigned void volatile while 特殊符号+-*/ ++ -- += -= *= < <= > >= == != =;,()[]{} /* */ : 文件结束、错误 EOF ERROR 其它 token NUM ID CHARACTER STRING tokenType 类型代码 typedef enum { // 错误、结束 ENDFILE , ERROR , // 保留字 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 , // 其他 token ID , NUM , CHARACTER , STRING , // 特殊符号// +、-、*、/、++ 、-- 、+= 、-= 、*= 、<、<= 、>、>= 、== 、!= 、=、;、,、(、)、[、]、// {、}、/* 、*/ 、: PLUS , MINUS , TIMES , OVER , SELFPLUS , SELFMINUS , PLUSASSIGN , MINUSASSIGN , TIMESASSIGN , LT , LEQ , GT , GEQ , EQ , NEQ , ASSIGN , SEMI , COMMA , LPAREN , MINUSASSIGN , TIMESASSIGN , LT , LEQ , GT , GEQ , EQ , NEQ , ASSIGN , SEMI , COMMA , LPAREN , RPAREN , LBRACKET , RBRACKET , LCBRACKET , RCBRACKET , LCOMMENT , RCOMMENT , COLON } TokenType ; 四川大学《编译原理课程设计》学号 20********** 3 4 DFA 设计 注释的 DFA 设计注释的 DFA 如下所示,一共分为 5 个状态