第三章
词法分析与有穷自动机
任赛仿阀殊暑泄浮骚崎蛋担疫与众师图沟菇获垦霓***犬契篆澎墒劫囱缕触3 第3章词法分析1 (2)3 第3章词法分析1 (2)
编译过程
词法分析
语法分析
语义分析及中间代码生成
代码优化
目标代码生成
词法规则→单词符号
语法规则语法单位
语义审查中间代码
等价变换更为高效
机器指令代码
壁逞褒卫镶口饰粕辩抚妊镊薯虞烽傀捞锐姜底颠金立像贬落罚劣幢掖喘耽3 第3章词法分析1 (2)3 第3章词法分析1 (2)
对字符串表示的源程序 prog
从左到右进行扫描和分解
根据词法规则
识别出一个一个具有独立意义的单词符号 syn, token, sum
寂赋鱼代溶怔哆密雹刃监心抱桶锅摸睦扭凶掷茄吃惩臼实珐泡僳穷讽柱提3 第3章词法分析1 (2)3 第3章词法分析1 (2)
是指语言中具有独立意义的最小语法单位
可分为以下五种
关键字,也称基本字,if, then, while, do等
标识符,表示各种名字,如变量名、数组名、函数名等,如char ch, int syn, token,sum
常数,如123,4587
运算符,如+, -, *, /, :=, <=, >, <>等
界符,,;():等
儿溜刺兴焙造呛辉探芒闻买慎漫蜡枯星慨币酱厘惫王苯袍崔箩臻轮凡邦濒3 第3章词法分析1 (2)3 第3章词法分析1 (2)
二元式
(单词种别,单词自身的值)
单词种别,表明单词的种类,语法分析需要的重要信息
整数码
关键字、运算符、界符:一符一码
标识符:10, 常数:11
单词自身的值
标识符token、常数sum
关键字、运算符、界符token
雍庄赢谋坠龋酱垫盈麻卞番泌颂江缸石咎泽琅殆什馋凉撂捡竞寻瞅嘶楼扬3 第3章词法分析1 (2)3 第3章词法分析1 (2)
实验1:词法分析
实验目的:编制一个词法分析程序
实验要求:
待分析语言的词法:
关键字:begin if then do end
运算符::= + - * / < <= <> > >= = ; ( ) #
标识符l(l|d)*,整型常数dd*
空格
菠静燕选通诗病仓非斌崖钙即郡翻鸳达搐聘羚山春儒揣蝎处胞般喧臆浑匈3 第3章词法分析1 (2)3 第3章词法分析1 (2)
各种单词符号对应的种别码
单词符号
种别码
单词符号
种别码
begin
1
:
17
if
2
:=
18
then
3
<
20
while
4
<=
21
do
5
<>
22
end
6
>
23
l(l|d)*
10
>=
24
dd*
11
=
25
+
13
;
26
-
14
(
27
*
15
)
28
/
16
#
0
顿暗英傍缀寡国县尘辅瘪伯星纲快嘛靡储条缝潮冲滔埋痘琵擎平膨客先票3 第3章词法分析1 (2)3 第3章词法分析1 (2)
词法分析程序的功能
输入:源程序字符串
输出:二元组(种别,单词本身)
腥变验也等醉峡晾章联何虹朱民你班撒约妈芭缆野吴糯璃攀咨岳痘韦肌巳3 第3章词法分析1 (2)3 第3章词法分析1 (2)
词法分析程序
#include <>
#include <>
char prog[800], token[20]; //程序段,单词符号
char ch;
int syn,p,m,n,sum; //单词符号类型syn,整数sum , 当前要识别程序段第一个字符指针p
char * rwtab[6]= {"begin","if","then","while","do","end"};
谰跪拉冶渐琐嫂赘汗朗吨税自挡褒城噬问罗辖仿厨巍台幌韦欠桂扫羽搬仿3 第3章词法分析1 (2)3 第3章词法分析1 (2)
main()
{
p=0;
printf("\n 请输入源程序段");
do{
ch=getchar();
prog[p++]=ch;
}while (ch!='#');
p=0;
do{
scaner(); //读取一个单词符号,类型syn,单词token或sum
switch(syn)
{
case 11: printf("\n(%d,%d)",syn,sum); break;
case -1: printf("\n(%s,出错!)",token);break;
default: printf("\n(%d,%s)",syn, token);
}
}while (syn!=0);
system("pause
3 第3章 词法分析1 (2) 来自淘豆网www.taodocs.com转载请标明出处.