- 1、本文档共87页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
会计学;3.1 对于词法分析器的要求;3.1.1 词法分析器的功能和输出形式;3.1.1 词法分析器的功能和输出形式;3.1.1 词法分析器的功能和输出形式;3.1.1 词法分析器的功能和输出形式;3.1.2 词法分析器作为一个独立子程序;3.1.2 词法分析器作为一个独立子程序;3.2 词法分析器的设计;3.2.1 输入、预处理;3.2.2 单词符号的识别:超前搜索;3.2.2 单词符号的识别:超前搜索;3.2.3 状态转换图;3.2.3 状态转换图;状态转换图示例;几点重要限制——不必使用超前搜索
所有关键字都是保留字;用户不能用它们作自己的标识符
关键字作为特殊的标识符来处理;不用特殊的状态图来识别,只要查保留字表。
如果关键字、标识符和常数(或标号)之间没有确定的运算符或界符作间隔,则必须使用一个空白符作间隔。
DO99K=1,10 要写成 DO 99 K=1,10;;思想:每个状态结对应一小段程序。
做法:
1)对不含回路的分叉结,可用一个CASE语句或一组IF-THEN-ELSE语句实现
2)对含回路的状态结,可对应一段由WHILE结构和IF语句构成的程序
3)终态结表示识别出某种单词符号,因此,对应语句为 RETURN (C,VAL) 其中,C为单词种别,VAL为单词自身值;全局变量与过程
1) CHAR 字符变量、存放最新读入的源程序字符
2) TOKEN 字符数组,存放构成单词符号的字符串
3) GETCHAR 子程序过程,把下一个字符读入到CHAR中
4) GETNBC 子程序过程,跳过空白符,直至CHAR中读入一非空白符
5) CONCAT 子程序,把CHAR中的字符连接到TOKEN;全局变量与过程
6) LETTER 布尔函数,判断CHAR中字符是否为字母
7) DIGIT 布尔函数,判断CHAR中字符是否为数字
8) RESERVE 整型函数,对于TOKEN中的字符串查找保留字表,若它是保留字则给出它的编码,否则回送0
9) RETRACT 子程序,把搜索指针回调一个字符位置
10) DTB 函数,把TOKEN中的字符串翻译成二进制码;START: TOKEN:=''; /*置TOKEN为空串*/
GETCHAR; GETNBC;
CASE CHAR OF
'A'..'Z':
BEGIN
WHILE LETTER OR DIGIT DO
BEGIN CONCAT;GETCHAR END;
RETRACT;
C:=RESERVE;
IF C=0 THEN RETURN ($ID,TOKEN)
ELSE RETURN (C,-)
END;;'0'..'9':
BEGIN
WHILE DIGIT DO
BEGIN CONCAT;GETCHAR END;
RETRACT;
RETURN ($INT,DBT)
END;
'=': RETURN ($ASSIGN,-);
'+': RETURN ($PLUS,-);;’*':
BEGIN
GETCHAR;
IF CHAR='*' THEN RETURN ($POWER,-);
RETRACT; RETURN ($STAR,-);
END;
',': RETURN ($COMMA,-);
'(': RETURN ($LPAR,-);
')': RETURN ($RPAR,-);
END OF CASE;
ERROR;
GOTO START;;3.3 正规表达式与有限自动机;∑*的子集U和V的连接(积)定义为;3.3.1 正规式与正规集;3.3.1 正规式与正规集;3.3.1 正规式与正规集;3.3.1 正规式与正规集;若两个正规式所表示的正规集相同,则称这两个正规式等价。如
b(ab)*=(ba)*b (a*b*)*=(a|b)*
对正规式,下列等价成立:
e1|e2 = e2|e1 交换律
e1(|e2|e3) = (e1|e2)|e3 结合律
e1(e2e3) = (e1e2)e3 结合律
e1(e2|e3) = e1e2|e1e3 分配律
(e2|e3)e1 = e2e1|e3 e1 分配律
e? = e? = e 但 e1e2 <> e2 e1 ;有限自动机;有限自动机;3.3.2 确定有限自动机(DFA);3.3.2 确定有限自动机(DFA);3.3.2 确定有限自动机(DFA);3.3.2 确定有限自动机(DFA);对于?*中的任何字?,若存在一条从初态到某一终态的道路,且这条
文档评论(0)