《编译技术编译原理 (7).pdf》由会员分享,可在线阅读,更多相关《编译技术编译原理 (7).pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编译技术词 法 分 析本讲纲要正规式的定义和运算正规式和状态转换机之间的关系0102词法模式的表示方法,是词法记号描述的核心词法单元记号模式正规式正规式:按照一组定义规则,由较简单的正规式构成的,每个正规式r 表示一个语言 L(r)。定义规则说明 L(r)是怎样以各种方式从 r 的子正规式所表示的语言组合而成。正规式用来表示简单的语言,叫做正规集。正规式正规式是用于说明词法单元如何对应到词法记号的模式。与非形式化的描述相比,正规式更具形式化,更加精确。正规式 定义的语言备注aaa (r)|(s)L(r)L(s)r 和s是正规式(r)(s)L(r)L(s)r 和s是正规式(r)*(L(r)*r
2、是正规式(r)L(r)r 是正规式运算符的优先级:*连接运算|(a)(b)*)|(c)可以写成ab*|c定义字母表上正规式的规则正规式正规式的例子 =a,ba|ba,b(a|b)(a|b)aa,ab,ba,bbaa|ab|ba|bbaa,ab,ba,bba*由字母a 构成的所有串集(a|b)*a 和b 构成的所有串集复杂的例子(00|11|(01|10)(00|11)(01|10)句子:01001101000010000010111001正规式对正规式命名,使表示简洁。-d1r1-d2r2-.-dnrn各个di的名字都不同每个ri都是 d1,d2,di-1上的正规式正规定义保证:每个名字对应的
3、正规式中使用的各种符号已经在前面定义了,从而可以避免递归定义的情况。正规式表示letter A|B|Z|a|b|zdigit 0|1|9id letter(letter|digit)*怎么用语言来描述Pascal的标识符模式?Pascal标识符模式的自然语言描述:-首字符必须是字母,由字母或数字组成的字符串。Pascal里面的标识符模式模式的非形式描述首字符必须是_或者字母,由_、字母或数字组成的字符串。请仿照Pascal标识符的例子,写出C语言的标识符的正规式表示C语言的标识符模式正规定义的例子-C语言的标识符是字母、数字和下划线组成的串。letter_A|B|Z|a|b|z|_digit
4、0|1|9id letter_(letter_|digit)*C语言的标识符模式Pascal无符号数集合,例1946,11.28,63.6E8,1.99E6 digit 0|1|9digits digit digit*optional_fraction .digits|optional_exponent (E(+|)digits)|numdigits optional_fraction optional_exponent简化表示num digit+(.digit+)?(E(+|)?digit+)?正规定义的例子简化规则:(1)r+=rr*(2)r?=r|(3)a-z=a|b|c|zwhile
5、whiledo dorelop|=|=|=id letter(letter|digit)*numdigit+(.digit+)?(E(+|)?digit+)?delim blank|tab|newlinews delim+正规定义的例子前面所提到的词法记号,实际上就是正规式的名字!词法记号的识别-等同于对字符串的匹配过程这个匹配过程可以基于状态转换图来完成状态转换图=有限状态机词法记号的识别简单的正规式d-a正规式d-ab正规式d-a|b状态转换图01a02a1b01ab正规式d-a*正规式d-a?字符a出现一次或者0次正规式d-a(a|b)*状态转换图0a01a01aab关系算符的转换图状态
6、转换图051624837return(relop,LE)return(relop,NE)return(relop,LT)return(relop,GE)return(relop,GT)return(relop,EQ)开始=*otherotherrelop|=|=|=标识符和关键字的转换图状态转换图91011开始letterother*letter或digitreturn(install_id()id letter(letter|digit)*1、检查关键字表,如果在表中发现该词法单元则返回相应的记号并退出,否则转向22、该词法单元是标识符,在符号表中查找,若找到该词法单元则返回该条目的指针并退出,否则执行33、在符号表中建立一个新的条目,把该词法单元填入,并返回此新条目的指针无符号数的转换图状态转换图1912131415161718digitdigitdigitdigitdigitdigitother.E+/Edigitotherotherreturn(install_num()*num digit+(.digit+)?(E(+|)?digit+)?空白的转换图delim blank|tab|newline ws delim+状态转换图2122开始delimother*delim20编译技术词 法 分 析