- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.PL/0编译程序;;2.PL/0语言; PL/0语言是PASCAL语言的子集;内的文字或符号表示非终结符;const; EBNF 引入的符号(元符号):
:用左右尖括号括起来的语法成分为非终结符
∷= :‘定义为’ ∷=的左部由右部定义
| :‘或’
{ } :表示花括号内的语法成分可重复任意次或限
定次数
[ ] :表示方括号内的语法成分为任选项
( ) :表示圆括号内的成分优先;例:用EBNF描述分程序的定义;PL/0程序示例; 3.PL/0编译程序的总体设计;其编译过程采用一趟扫描方式
以语法、语义分析程序为核心
词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。
表格管理程序实现变量,常量和过程标识符的信息的登录与查找。
出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误性质有关的编号,并进行错误恢复。; 4.词法分析;
符号表
type symbol=( nul, ident, number, plus, …,
varsym, procsym );
保留字表:
word[1]:=‘BEGIN‘;
word[2]:=‘CALL‘;
...
word[13]:=‘WRITE‘;
单字符表:
ssym[‘+’]:=plus; ssym[‘-’]:=minus;
…
ssym[‘;’]:=semicolon;
;全局变量
1)SYM:存放单词的类别
如:有程序段落为:
begin initial := 60;end
对应单词翻译后变为:
begin beginsym, initial ident,
‘:= ‘ becomes, 60 number,
‘;’ semicolon, end endsym 。
2)ID: 存放用户所定义的标识符的值 如:initial
(在SYM中放ident,在ID中放initial)
3)NUM:存放用户定义的数 如:60
(在SYM中放在number在NUM中放60)
GETSYM框图(见教材P19图2.5);任务一:读程序;任务二:扩充单词; 5. 语法分析 —递归子程序法; 程序 pl0;
;任务三; 类pcode代码
语句的语义分析和处理
;目标代码类pcode是一种假想栈式计算机的汇编语言。
指令格式:
类pcode代码是由过程 GEN 生成的,放在数组CODE中。;指
令
功
能
表;
CONST a=10;VAR b,c;BEGIN READ(b); WHILE b#0 DO BEGIN READ(b); ENDEND.;解释器的结构;
CONST a=10;VAR b,c;BEGIN READ(b); WHILE b#0 DO BEGIN READ(b); ENDEND.;条件语句 ::= if 条件 then 语句
if( SYM == ident ){//处理条件语句
getSym();
condition();
if(SYM == thensym) getSym();
else Error();
statement();
}else{……} //处理其它语句
;条件语句 ::= if 条件 then 语句
if( SYM == ident ){//处理条件语句
getSym();
condition();
if(SYM == thensym) getSym();
else Error();
statement();
}else{……} //处理其它语句
;条件语句 ::= if 条件 then 语句
if( SYM == ident ){//处理条件语句
getSym();
condition();
if(SYM == thensym) getSym();
else Error();
statement();
}else{……} //处理其它语句
;条件语句 ::= if 条件 then 语句
文档评论(0)