文档介绍:WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
1
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计(递归降落法、输出三地点表示)
1系统描绘
依据课程设计的要求,写一个能辨别while循环语句的文法,经过必定的变换使它切合递归降落法的要求,而后依据这个文法编
写一个程序,该程序能辨别输入的语句能否切合while语句的文法,或许能不可以经过文法的开始符号推导出该语句。
该程序应当包含词法剖析器,能对输入的语句进行词法剖析,而后再对结果进行语法剖析。词法剖析器应能辨别重点字,标示
符,常量,操作符等。
该程序的语法剖析器能对输入的语法进行剖析,判断输入语句可否知足while循环语句的文法。经过递归降落的方法对语句进行剖析,看可否经过开始符号推导出来。
该程序的语义剖析器就是对剖析结果进行输出,要求输出结果是三地点形式的。
2文法及属性文法的描绘
2.1文法描绘
语句
>::=while(<
条件表达式
>(<
赋值语句
>|
语句
>
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
<条件表达式
>::=(<
表记符
>|<无符号整数
>)<条件运算符
>(<
标
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
识符>|<无符号整数
>
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
<表记符>::=< 字母>(<字母>|<数字>
<条件运算符>::=>|<|=
<无符号整数>::=< 数字>(<数字>
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
<赋值语句>::=< 表记符>=(<表记符>|<数字><算术运算符>(<标
识符>|<数字>
<算术运算符>::=+|-|*|/
<赋值语句>::=< 表记符>=<表记符>|<数字>
2.2递归文法
while 语句文法:
S->while(BS|i=E
B->ErelopE
relop-><|=|>
E->E+E|E-E|E*E|E/E|(E|i|n
在编写程序的时候用到的是递归降落法,而递归降落法对文法的要求是不可以包含左递归,对上述的文法进行除去左递归以后,得
到以下的递归文法:
S->while(BS|i=E
B->ErelopE
relop-><|=|>
E->(EF|iF|nF
F->+EF|-EF|*EF|/EF| ε
2.3属性文法的描绘
产生式 属性文法
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
6
WHILE循环语句的翻译程序设计.
S->while(BS1 :=newlabel;
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
:=newlabel;
:=newlabel;
:=;
:=;
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
8
WHILE循环语句的翻译程序设计.
:=gen(,
||gen(,
‘:’
‘:’
||
||
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
||gen( ‘goto’||
gen(, ‘:’
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
||gen(
‘gotoLnext
’;
WHILE循环语句的翻译程序设计.
WHILE循环语句的翻译程序设计.
19
WHILE循环语句的翻译程序设计.
B->E1relopE2
:=newlabel;
||||
WHILE循环语句的翻译程序设计.