西安交大:词法分析教程——基于有限自动机与正规表达式

需积分: 15 6 下载量 50 浏览量 更新于2024-08-21 收藏 1.71MB PPT 举报
在西安交通大学Yinliang Zhao教授的指导下,该PPT聚焦于程序设计中的关键概念——词法分析。词法分析是编程语言处理的第一步,它将源代码分解为更小、有意义的单元,即词汇单元或词法元素。课程内容主要包括以下几个部分: 1. 程序结构:程序由程序首部和分程序组成。程序首部包含`program`标识符,而分程序由复合语句构成,复合语句以`begin`开始,以`end`结束。 2. 语句结构:语句包括赋值语句、复合语句和条件语句。赋值语句用`:=`表示对标识符进行赋值,条件语句则通过`if-then-else`结构根据布尔表达式的值来执行不同的代码块。 3. 表达式和项:表达式由项组成,项又可以是因式。因式包括标识符、无正负号常量(数字)以及操作符应用于表达式的结果。例如,`<项>{(+|-)<项>}`定义了加减运算,`<因式>{(*|/)<因式>}`涵盖了乘除运算。 4. 布尔表达式和关系运算符:布尔表达式是基于两个表达式的关系运算,如等于(=)、小于(<)、大于(>)、大于等于(>=)、小于等于(<=)和不等于(<>)。 5. 词法分析器设计:课程介绍了如何设计和实现词法分析器,包括确定有限自动机和非确定有限自动机的概念,以及它们与正规文法和正规式之间的关系。正规文法用于描述语言的结构,而确定有限自动机则是其机械化的形式,它们之间存在等价性。 6. 正规式与正规集:正规式是字符串模式的描述工具,表示满足特定规则的字符串集合。例如,`ba*`是一个正规式,表示所有以`b`开头,后面跟零个或多个`a`的字符串集合。 7. 正规式的基本操作:包括选择运算(|)、连接运算()、和重复运算(*)。这些运算组合成更为复杂的正规式,并规定了运算的优先级和括号使用规则。 8. 举例与正规集:通过实例展示了如何构造正规式以及它们对应的正规集。比如,`ba*`表示所有以`b`开头,后面跟任意数量`a`的字符串集合。 这个PPT深入浅出地讲解了词法分析的基础理论和应用,对于理解和编写编程语言的解析器或理解计算机科学中的语言学原理具有重要意义。

以C语言小子集定义表(见表1)为例实现词法分析; 表1 C语言小子集定义表 image.png 2. 设计单词属性字,及各类表格(表示符表、常量表、单词符号及机内表示); 3. 画出总控流程图,确定各个子程序的功能并画出控制流程图; 4. 编码实现词法分析程序 采用标准输入和输出的方式。程序从键盘接收代码,遇到代码结束符“#”时结束,并将词法分析的结果输出到屏幕上。 要求实现: (1)对正确源程序的识别; (2)对包含有注释//和/* */的源程序的识别; (3)对包含错误标识符的源程序的识别。(注意,行号的计算不包含空行,详见样例3) 5. 设计3-5个测试实例,要求覆盖上述功能,并完成测试 【输入形式】c语言小子集的程序片段 【输出形式】单词序列 【样例输入1】 int i = 3; int j = 10; int m = max(i, j); while(i<=m) do { i = i+ 1; } void max(int x, int y) { int temp = 0; if(x > y) temp = x; else temp = y; return temp; } # 【样例输出1】 <4,->,<1,i>,<27,->,<2,3>,<34,->, <4,->,<1,j>,<27,->,<2,10>,<34,->, <4,->,<1,m>,<27,->,<1,max>,<28,->,<1,i>,<35,->,<1,j>,<29,->,<34,->, <9,->,<28,->,<1,i>,<20,->,<1,m>,<29,->,<10,->, <32,->, <1,i>,<27,->,<1,i>,<14,->,<2,1>,<34,->, <33,->, <3,->,<1,max>,<28,->,<4,->,<1,x>,<35,->,<4,->,<1,y>,<29,->, <32,->, <4,->,<1,temp>,<27,->,<2,0>,<34,->, <7,->,<28,->,<1,x>,<21,->,<1,y>,<29,->, <1,temp>,<27,->,<1,x>,<34,->, <8,->, <1,temp>,<27,->,<1,y>,<34,->, <12,->,<1,temp>,<34,->, <33,->,

2023-05-18 上传
2023-06-01 上传