资源描述:
《语法分析-预测分析方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验2-1语法分析—预测分析方法一、实验目的使用预测分析方法编制分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。了解预测分析法和递归子程序法的区别和联系,培养动手实践的能力。二、实验内容使用预测分析法分析一段程序代码。如果符合文法定义,程序输出“是”,否则输出“否”。由于预测分析和递归子程序都是自顶向下的分析方法,这里给出无回溯的和无左公因子的文法。无左递归和无左公因子的BNF如下:<程序>→<程序首部><分程序>.<程序首部>→PROGRAM标识符;<分程序>→<常量说明部分><变量说明部分><过程说明部分><复合语句><常量说明部分>→CON
2、ST<常量定义><常量定义后缀>;
3、ε<常量定义>→标识符=无符号整数<常量定义后缀>→,<常量定义><常量定义后缀>
4、ε<变量说明部分>→VAR<变量定义><变量定义后缀>
5、ε<变量定义>→标识符<标识符后缀>:<类型>;<标识符后缀>→,标识符<标识符后缀>
6、ε<变量定义后缀>→<变量定义><变量定义后缀>
7、ε<类型>→INTEGER
8、LONG<过程说明部分>→<过程首部><分程序>;<过程说明部分后缀>
9、ε<过程首部>→PROCEDURE标识符<参数部分>:<参数部分>→(标识符:<类型>)
10、ε<过程说明部分后缀>→<过程首部><分程序>;<过程说明部分后缀
11、>
12、ε<语句>→<赋值或调用语句>
13、<条件语句>
14、<当型循环语句>
15、<读语句>
16、<写语句>
17、<复合语句><赋值或调用语句>→标识符<后缀><后缀>→:=<表达式>
18、(<表达式>)
19、ε<条件语句>→IF<条件>THEN<语句><当型循环语句>→WHILE<条件>DO<语句><读语句>→READ(标识符<标识符后缀>)<写语句>→WRITE(表达式<表达式后缀>)<表达式后缀>→,<表达式><表达式后缀>
20、ε<复合语句>→BEGIN<语句><语句后缀>END<语句后缀>→;<语句><语句后缀>
21、ε<条件>→<表达式><关系运算符><表达式>
22、ODD<表达式><表达式>
23、→+<项><项后缀>
24、-<项><项后缀>
25、<项><项后缀><项后缀>→<加型运算符><项><项后缀>
26、ε<项>→<因子><因子后缀><因子后缀>→<乘型运算符><因子><因子后缀>
27、ε<因子>→标识符
28、无符号整数
29、(<表达式>)<加型运算符>→+
30、-<乘型运算符>→*
31、/<关系运算符>→=
32、<>
33、<
34、<=
35、>
36、>=为了将非终结符和终结符一起存入栈,将非终结符的内码从128开始标记。其对照表如下:表1终结符种别码对照表种别码单词种别码单词种别码单词种别码单词1PROGRAM2CONST3VAR4INTEGER5LONG6PROCEDURE7IF8THEN9WHILE
37、10DO11READ12WRITE13BEGIN14END15ODD16+17-18*19/20=21<>22<23<=24>25>=26.27.28;29:30:=31(32)33无符号整数34标识符35#表2非终结符及函数名对照表非终结符函数名非终结符函数名<程序>program<程序首部>proghead<分程序>block<常量说明部分>consexpl<常量定义>consdefi<变量说明部分>varexpl<常量定义后缀>conssuff<变量定义>vardefi<变量定义后缀>varssuff<过程说明部分>procdefi<类型>typeil<过程
38、首部>procedh<过程说明部分后缀>procsuff<赋值或调用语句>assipro<语句>sentence<后缀>suffix<条件语句>ifsent<读语句>read<当型循环语句>whilesent<标识符后缀>idsuff<写语句>Write<复合语句>compsent<表达式后缀>Exprsuff<语句后缀>sentsuff<条件>Conditio<项后缀>termsuff<表达式>Express<项>term<因子后缀>Factsuff<参数部分>argument<因子>Factor<加型运算符>addoper<乘型运算符>Muloper<关系运算
39、符>respoper三、完整源程序代码#include#include#include#include#include#definelenth115#definelenth218/*规则表*/intrule[][6]={{0},//空{129,130,26,0},//程序首部分程序.{1,34,28,0},//program标识符;{131,134,138,150,0},//常量说明部分变量说明部分过程说明部分复合语句{2,132,133,28,0},//const常
40、量定义常量