编译原理递归子程序语法分析
2018-11-28 22:07
260 查看
编译原理递归子程序语法分析
递归子程序法也称为递归下降分析法。该方法的实现思想是:对文法中的每个非终结符号U都编写出一个子程序,以完成该非终结符号所对应的语法成分的分析和识别任务。高级程序设计语言的语法规则通常都是用上下文无关文法来描述的,文法中的符号分为终结符号和非终结符号。
本分析程序所分析的文法如下:
-
G[E]:
E→eBaA
A→a|bAcB
B→dEd|aC
C→e|dC -
可以求出
First(E)={e} Slect(A→a)={a} Slect(B→aC)={a}
First(A)={a,b} Slect(E→eBaA)={e} Slect(C→e)={e}
First(B)={a,d} Slect(A→bAcB)={b} Slect(C→dC)={d}
First©={d,e} Slect(B→dEd)={d} -
求解字符串
1、eadeaa
2、edeaebd
3、edeaeaadabacae
是否是该文法的句子。 -
C++源代码
#include<iostream> #include<string> using namespace std; char lookahead ; int count; int i=0; bool sign=1; char int_str[][20]={"eadeaa","edeaebd","edeaeaadabacae"}; void ParseB(); void ParseA(); void ParseC(); void ParseE(); void MatchToken(int expected) { if(lookahead!=expected) { sign=0; //cout<<" Match error!"<<endl; } else count++; lookahead=int_str[i][count]; } void ParseE() { if(lookahead=='e') { MatchToken('e'); ParseB(); MatchToken('a'); ParseA(); } else sign=0; //cout<<"E error"<<endl; } void ParseB() { if(lookahead=='d') { MatchToken('d'); ParseE(); MatchToken('d'); } else if(lookahead=='a') { MatchToken('a'); ParseC(); } else{ sign=0; //cout<<"B error"<<endl; } } void ParseA() { if(lookahead=='a') { MatchToken('a'); } else if(lookahead=='b') { MatchToken('b'); ParseA(); MatchToken('c'); ParseB(); } else{ sign=0; //cout<<"A error"<<endl; } } void ParseC() { if(lookahead=='e') { MatchToken('e'); } else if(lookahead=='d') { MatchToken('d'); ParseC(); } } int main() { for(;i<3;i++) { count=0; sign=1; lookahead=int_str[i][count]; ParseE(); if(sign) { cout<<"第"<<i+1<<"组数据正确"<<endl; } else cout<<"第"<<i+1<<"组数据错误"<<endl; } }
- 运行截图
- 函数流程图
相关文章推荐
- 编译原理--递归下降语法分析源代码(C Language)
- 编译原理:递归向下分析程序建立语法分析树的Java实现(一)
- 【编译原理】自顶向下的语法分析之递归下降分析法
- 编译原理 实验3 递归下降语法分析程序设计
- 编译原理:递归向下分析程序建立语法分析树的Java实现(二)
- 编译原理,自上而下非递归语法分析自上而下的语法分析
- 编译原理实验2-递归下降分析–表达式求值
- 编译原理之算符优先分析语法程序
- 编译原理之基于扫描器的表达式语法分析+逆波兰表达式生成
- 编译原理:语法分析
- 编译原理之词法分析、语法分析、语义分析
- 编译原理手记05-文法和语法分析中一些概念的解释
- 编译原理语法分析(文本输入)源程序
- 编译原理丨第十三周 ——1000. 输入输出LL(1)语法分析程序
- 编译原理笔记7 自上而下语法分析-…
- 编译原理语法分析LR1
- 编译原理学习笔记05——(识别孙悟空72变之魔鬼特训—递归下降分析程序构造)——2014_1_20
- <编译原理>自顶向下语法分析
- 自顶向下语法分析——编译原理
- 编译原理笔记8 自上而下语法分析-…