资源简介

一、实验目的 实现一个递归下降语法分析程序,识别用户输入的算术表达式。 二、实验主要内容 1、文法如下: ETE` E’+TE’|-TE’| TFT` T’*FT’|/FT’| F(E)|i 2、求取各非终结符的First及Follow集合 3、编程实现下降递归分析法,识别从键盘输入的关于整数或浮点数的算术表达式(在此,上述文法中的i代表整数或浮点数) 4、对于语法错误,要指出错误具体信息。

资源截图

代码片段和文件信息

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Analysis {
private String statement;
private int index=0;
private int kuohu=0;

public static void main(String arg[]){
System.out.println(“Please enter an arithmetic expression to analyse!“);
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String expression;
try {
expression = in.readLine()+“#“;
Analysis test=new Analysis(expression);
test.show();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println(“输入出错!“);
}
}

public Analysis(String expression){
statement=expression;
}

public void show(){
try {
E();
System.out.println(“Successful!“);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
private void E() throws Exception{
T();
Ep();
}
private void Ep() throws Exception{
if(statement.charAt(index)==‘+‘||statement.charAt(index)==‘-‘){
index++;
T();
Ep();
}else{
if(statement.charAt(index)==‘)‘&&kuohu%2!=1)
throw new Exception(“括号匹配错误“);
if(statement.charAt(index)!=‘#‘&&statement.charAt(index)!=‘)‘)
throw new Exception(“存在非法符号!“);
}
}
private void T() throws Exception{
F();
Tp();
}
private void Tp() throws Exception{
if(statement.charAt(index)==‘*‘||statement.charAt(index)==‘/‘){
index++;
F();
Tp();
}else{
if(statement.charAt(index)==‘)‘&&kuohu%2!=1)
throw new Exception(“括号匹配错误“);
if(statement.charAt(index)!=‘#‘&&statement.charAt(index)!=‘)‘&&statement.charAt(index)!=‘+‘&&statement.charAt(index)!=‘-‘)
throw new Exception(“存在非法符号!“);
}
}
private void F() throws Exception{
int flag=0;
if(statement.charAt(index)==‘(‘){
kuohu++;
index++;
E();
if(statement.charAt(index)!=‘)‘){
throw new Exception(“括号匹配错误!“);
}
kuohu--;
index++;
return;
}
if(statement.charAt(index)<=‘9‘&&statement.charAt(index)>=‘0‘){
index++;
while((statement.charAt(index)<=‘9‘&&statement.charAt(index)>=‘0‘)||statement.charAt(index)==‘.‘){
if(statement.charAt(index)==‘.‘){
if(flag==1){
throw new Exception(“浮点数错误!“);
}
flag++;
}
index++;
}
return;
}
throw new Exception(“运算符错误!“);


}

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2459  2012-12-15 16:12  Analysis.java

评论

共有 条评论