没有合适的资源?快使用搜索试试~ 我知道了~
编译原理-词法分析[整理].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 75 浏览量
2021-10-12
05:58:40
上传
评论
收藏 2.27MB PDF 举报
温馨提示
试读
27页
编译原理-词法分析[整理].pdf
资源推荐
资源详情
资源评论
编译原理实验报告
词法分析器与语法分析器
I. 问题描述
设计、编制并调试一个词法分析子程序,完成识别语言单词的任务;
设计、编制、调试一个语法分析程序, 并用它对词法分析程序所提供的单词
序列进行语法检查和结构分析。
ii. 设计简要描述
界面需求:
为了更加形象的模拟过程, 此实验使用图形界面。 要求从图形界面上输入输
入串,点击词法分析,可以将词法分析后识别的单词符号显示,点击语法分析,
可以将语法分析的堆栈过程显示,并且显示结果(是否是符合文法的句子) ,清
空则可以将所有置空。
功能分析:
1、由用户输入输入串;
2、用户点击“词法分析” ,可以将词法分析后识别的单词符号显示。
3、用户点击语法分析, 可以将语法分析的堆栈过程显示, 并且显示结果(是
否是符合文法的句子)
4、用户点击清空,则将界面所有组件置为空
思路描述:
一、设计构想:
本实验决定编写一个简易 C 语言的词法分析器和语法分析器。使其能够识
别 while,if 等关键字,可以判断赋值语句、条件语句、循环语句。
二、文法分析
1、需要识别的关键字及其识别码有:
关键字 识别码 关键字 识别码 关键字 识别码
main 0 - 11 ; 22
int 1 * 12 > 23
char 2 / 13 < 24
if 3 ( 14 >= 25
else 4 ) 15 <= 26
for 5 [ 16 == 27
while 6 ] 17 != 28
ID 7 { 18 ERROR -1
NUM 8 } 19
= 9 , 20
+ 10 : 21
2、文法
〈程序〉 → main() 〈语句块〉
〈语句块〉 →{〈语句串〉 }
〈语句串〉 →〈语句〉;〈语句串〉 | 〈语句〉;
〈语句〉 →〈赋值语句〉 | 〈条件语句〉 | 〈循环语句〉
〈赋值语句〉 → ID = 〈表达式〉 ;
〈条件语句〉 → if 〈条件〉〈语句块〉
〈循环语句〉 → while 〈条件〉〈语句块〉
〈条件〉 →(〈表达式〉〈关系符〉〈表达式〉)
〈表达式〉 →〈表达式〉〈运算符〉〈表达式〉 | (〈表达式〉) |ID|NUM
〈运算符〉 →+|-|*|/
〈关系符〉 →< | <= | >| >= | =| !>
转化为符号表示:
S→ main() K| 空
K→ { C }
C→Y;C | 空
Y→F | T | X
F→ ID = B
T→ if J K
X→ while J K
J→( B G B )
B → B Z B | ( B )| ID | NUM
Z→ + | - | * | /
G→< | <= | > | >= | == | !>
表示含义:
S:程序 K :语句块 C :语句串 Y :语句 F :赋值语句
T:条件语句 X :循环语句 J :条件 B :表达式 I :项 Z :运算符
G:关系符
3、LL (1)分析表
(1),求出 first 集及 follow 集:
FIRST(S)={mian}
FIRST(K)={{}
FIRST(C)= FIRST(Y)= {ID,if,while ,空 } ;
FIRST(Y)= FIRST(F)+ FIRST(T)+ FIRST(X)={ID,if,while};
FIRST(F)={ID};
FIRST(T)={if};
FIRST(X)={while};
FIRST(J)= FIRST(B)={};
FIRST(B)={(,ID,NUM } ;
FIRST(Z)={+ ,-,*,/}
FIRST(G)={ <, <= ,>,> = ,==,! = };
FOLLO W(S)={#} ;
FOLLO W(K)={;} ;
FOLLO W(C)={}} ;
FOLLO W(Y)={;}
FOLLO W(F)={;};
FOLLO W(T)={;};
FOLLO W(X)={;};
FOLLO W(J)={ { ,;} ;
FOLLO W(B)={+,-,* ,/,),<, <= ,>,> =,==,! =,; } ;
FOLLO W(B’) ={+, -,* ,/,),<, <= ,>,> = ,==,! =,; };
FOLLO W(Z)={ (,ID,NUM };
FOLLO W(G)={ (,ID,NUM };
(2)消除左递归,拆分文法关系并编号
0、S→ 空
1 、S→ main() K
2 、K→ { C }
3 、 C→Y;C
4 、 C→空
5 、Y→ F
6 、Y→ T
7 、Y→ X
8 、F→ ID = B
9 、 T→ if J K
10 、X→ while J K
11 、 J→( B G B )
12 、 B → ( B )B'
13 、B→ ID B'
14 、B→ NUM B'
15 、B' → BZB B'
16 、B' → 空
17 、 Z→ +
18 、 Z→ -
19 、 Z→ *
20 、 Z→ /
21 、 G → <
22 、 G → <=
23 、 G → >
24 、 G → >=
25 、 G → ==
26 、 G → !=
(3)构造 LL (1)分析表
(注:在表中用上一步的编号表示所需要的产生式)
iii. 详细设计描述
项目构架:
各函数功能介绍:
main
空
( ) { } ; = if while ID num + - * / < <= > >= == != #
S 1 0
K 2
C 4 4 3 3 3
Y 6 7 5
F 8
T 9
X 10
J 11
B 12 13 14
B
'
16 15 16 16 15 15 16 16 16 16 16 16 16 16 16 16
Z 17 18 19 20
G 21 22 23 24 25 26
剩余26页未读,继续阅读
资源评论
czq131452007
- 粉丝: 2
- 资源: 12万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功