没有合适的资源?快使用搜索试试~ 我知道了~
c语言词法分析器和c语言语法分析器编译原理课程设计论文正文大学论文.doc
2 下载量 85 浏览量
2023-06-29
15:01:25
上传
评论
收藏 372KB DOC 举报
温馨提示
试读
63页
c语言词法分析器和c语言语法分析器编译原理课程设计论文正文大学论文.doc
资源推荐
资源详情
资源评论
《编译原理课程设计》课程报告
题目 C 语言词法分析器和 C-语言语法分析器
学生姓名
学生学号
指导教师
提交报告时间 2019 年 6 月 8 日
四川大学《编译原理课程设计》 学号 2012141461017
1
C 语言词法分析器
1 实验目的及意义
1. 熟悉 C 语言词法
2. 掌握构造 DFA 的过程
3. 掌握利用 DFA 实现 C 语言的词法分析器
4. 理解编译器词法分析的工作原理
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+”
四川大学《编译原理课程设计》 学号 2012141461017
2
3 Token 定义
3.1 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
3.2 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;
四川大学《编译原理课程设计》 学号 2012141461017
3
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 表示字符(CHARACTER)类型 Token 的状态,
状态 DONE 表示接收状态。
在开始状态 START 时
➢ 如果输入的字符为空白符,如空格换行等,则仍在 START 状态
➢ 如果输入的字符为 digit,则进入状态 INNUM,即可能是数字类型(NUM)Token 的状态
➢ 如果输入的字符为 letter,则进入状态 INID,即可能是标识符类型 Token 的状态
➢ 如果输入的字符为>、<、!、=,则进入状态 INCOMPARE,即可能是比较运算符型 Token 的状态
➢ 如果输入的字符为+、—、*、/,则进入状态 INOPERATE,即可能是算数运算符类型 Token 的状态
➢ 如果输入的字符为‘,则进入状态 INCHAR,即可能是字符类型 Token 的状态
➢ 如果输入的字符为“,则进入状态 INSTRING,即可能是字符串类型 Token 的状态
➢ 如果输入的字符为是除以上之外的,则进入状态 DONE,这次输入的字符可能是单目运算符、错误等
在状态 INNUM 时
➢ 如果输入的字符为 digit,则仍停留在 INNUM 状态
➢ 如果输入的字符为”.”,则转到 INNUM1 状态
在状态 INNUM1 时
➢ 如果输入的字符为 digit,则进入 INNUM2 状态
四川大学《编译原理课程设计》 学号 2012141461017
4
在状态 INNUM2 时
如果输入的为其他的字符,则转到 DONE 状态
➢ 如果输入字符为 digit,则停留在 INNUM2 状态
➢ 如果输入的为其他字符,则转到 DONE 状态
在状态 INID 时
➢ 如果输入的字符为 letter 或“_”或 digit,则仍停留在 INID 状态
➢ 如果输入的为其他的字符,则转到 DONE 状态
在状态 INCOMPARE 时
➢ 如果输入的字符为=,则转到 DONE 状态
➢ 如果输入的为其他的字符,则直接转到 DONE 状态
在状态 INOPERATE 时
➢ 如果输入的字符为=,转到 DONE 状态
➢ 如果输入的为其他的字符,则直接转到 DONE 状态
在状态 INCOMPARE 时
➢ 如果输入的字符为=,则转到 DONE 状态
➢ 如果输入的为其他的字符,则直接转到 DONE 状态
在状态 INCHAR 时
➢ 如果输入为单引号,则转到 DONE 状态
➢ 如果输入的为其他字符,则停留在 INCHAR 状态
在状态 INSTRING 时
➢ 如果输入为双引号,则转到 DONE 状态
➢ 如果输入的为其他字符,则停留在 INSTRING 状态
在状态 DONE 时
接受状态,根据分析过程中获取的字符串确定 Token 的类型,并生成和保存相应的 Token
剩余62页未读,继续阅读
资源评论
yyyyyyhhh222
- 粉丝: 403
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功