算符优先文法分析 1
问题描述 基于算符优先分析法的语法分析程序 要求: (1)输入已知文法,生成文法矩阵,判断该文法是否是算符优先文法
(2)用程序自动生成该文法的算符优先关系矩阵
(3)对人工输入的句型或句子,分析该句型或句子是否合法,能否用已知文法推出
(4)具有通用性
所开发的程序可适用于不同的文法和任意输入串,且能判断该文法是否为算符优先文法
(5)有运行实例
对于输入的文法和符号串,所编制的语法分析程序应能正确判断此串是否为文法的句子,并要求输出分析过程
算符优先分析法 2
1算符优先文法 定义:设有不含空串的一文法G,如果G中没有形如G>„„BC„„的产生式,其中B和C为非终结符,且对任意两个终结符a,b之间之多只有,=,三种关系的一种成立,则称G是一个算符优先文法
非终结符的FIRSTVT集合和LASTVT集合 FIRSTVT(B)={b|B→b„或B→Cb„} LASTVT(B)={b|B→„a或B→„aC} 2
2算符优先矩阵 算符优先关系矩阵,判断输入是否满足已知文法的依据
根据非终结符的FIRSTVT集合和LASTVT集合产生
“=”关系 若 A→„ab„或A→„aBb„,则a=b; 2
“”关系 若 A→„aB„,对每一个b属于FIRSTVT(B),有ab; 3
“ ”关系 若 A→„Bb„,对每一个a属于 LASTVT(B),有 a b
3如何规约 在分析过程中,利用分析栈存放已识别的那部分句型,而句型的其余部分由剩余输入串组成,通过比较栈顶符号和下一个输入符号之间的关系,可以判别栈顶符号是否为句柄尾符号
如果是句柄尾,则沿栈顶向下,在栈内寻找句柄头(利用 关系)
由 关系和 关系之间包括的符号串就是句柄,然后把它们弹出栈,并代之以归约后的非终结符
这样就完成了一次归约过程
4算符优先分析方法的局