递归下降分析子程序

【实验目的】
1. 掌握 EBNF及其在递归下降分析子程序构造中的作用。
2. 掌握递归下降分析程序的构造方法。
【实验内容】
文法:E→E+T | T,T→T*F | F,F→(E) | i
根据该文法编写递归下降分析程序:
1. 输入:任意符号串。
2. 处理:递归调用分析输入串是否合法。
3. 输出:串是否合法。
【实验要求】
1.  根据上述文法的产生式规则用EBNF化简之并绘制相应的语法图。
2.  任选C/C++/Java 中的一种作为编程语言实现递归下降分析。

 

一、EBNF化简文法

化简结果如下:ET{+T}

                            FF{*F}

                            Fi|(E)

二、程序部分代码

    1.注意,本程序也是以#作为输入结束标识,否则会分析错误

  2.程序入口

E(); if(ip == input.length-1)//说明输入串已经分析完 System.out.println("分析结果:符合文法"); else//输入串没有分析完就结束 System.out.println("分析结果:ERROR 不符合文法");

    3.核心代码

public static void E() { T(); while(sym == '+') { ip++; sym = input[ip];//advance T(); } } public static void T() { F(); while(sym == '*') { ip++; sym = input[ip];//advance F(); } } public static void F() { if(sym == 'i') { ip++; sym = input[ip];//advance } else { if(sym == '(') { ip++; sym = input[ip];//advance E(); if(sym == ')') { ip++; sym = input[ip];//advance } else { System.out.println("分析结果:ERROR 不符合文法"); System.exit(0); } } else { System.out.println("分析结果:ERROR 不符合文法"); System.exit(0); } } }

你可能感兴趣的:(编程,input,语言)