: .
1. 实验目:掌握LL(1)分析法基本原理,掌握LL(1)分析表构造办法,掌握LL(1) 驱动程序构造办法。
:实现LR分析法(P147,)或预测分析法(P121,)。
:一台配备为1GXP操作系统PC机;Visual C++.
:编译程序语法分析器以单词符号作为输入,分析单词符号串与否形成符合语 法规则语法单位,如表达式、赋值、循环等,最后看与否构成一种符合规定程序,按该语言使用语法规则分析检查每条语句与否有对的逻辑构造,程序是最后一种语法单位。编译程序语法规则可用上下文无关文法来刻画。
语法分析办法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法开始符号出发,向下推导,推出句子。而自下而上分析法采用是移进归约法,基本思想是:用一种寄存符号先进后出栈,把输入符号一种一种地移进栈里,当栈顶形成某个产生式一种候选式时,即把栈顶这一某些归约成该产生式左邻符号。
自顶向下带递归语法分析:1、一方面对因此生成式消除左递归、提取公共左因子
2、在源程序里建立一种字符串数组,将所有生成式都存在这个数组中。
3、给每个非终结符写一种带递归匹配函数,其中起始符函数写在main函数里。 这些函数对生成式右边从左向右扫描,若是终结符直接进行匹配,匹配失败,则调用出错函数。如果是非终结符则调用相应非终结符函数。
4、对输入符号串进行扫描,从起始符生成式开始。如果匹配成功某个非终结符生成式右边首个终结符,则将这个生成式输出。匹配过程中,应当浮现非终结符没有浮现,则出错解决。
:相应源程序代码:
#include <>
#include <>
#include <stack>
using namespace std;
struct Node1
{ char vn;
char vt;
char s[10];
}MAP[20]; //存储分析预测表每个位置相应终结符,非终结符,产生式
int k; //用R代表E',W代表T',e代表空
char start='E';
int len=8;
charG[10][10]={"E->TR","R->+TR","R->e","T->FW","W->*FW","W->e","F->(E)","F->i"};//存储文法中产生式
char VN[6]={'E','R','T','W','F'}; //存储非终结符
char VT[6]={'i','+','*','(',')','#'}; //存储终结符
char SELECT[10][10]={"(,i","+","),#","(,i","*","+,),#","(","i"};//存储文法中每个产生式相应SELECT集
char Right[10][8]={"->
编译原理语法分析程序设计分析法 来自淘豆网www.taodocs.com转载请标明出处.