资源简介
一、实验目的
实现一个递归下降语法分析程序,识别用户输入的算术表达式。
二、实验主要内容
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
相关资源
- 词法分析器含代码及实验报告
- 编译原理课程设计含报告,源程序和
- 语义分析实验报告 经典
- 西安电子科技大学编译原理大作业代
- 编译原理文法的预测分析法
- 哈工大编译原理实验三次合一
- 编译原理实验----词法分析、分析预测
- 编译原理课程设计+源代码
- 自顶向下的语法分析器
- 四川大学编译原理课程设计报告C-词法
- 编译原理,词法分析&语法分析及源代
- 赋值语句词法和语法分析程序
- 《编译原理》课程设计指导书 算术表
- 常州工学院编译原理试卷A
- yacc实现的语法分析器
- 语法分析器实验报告
- 编译原理实验报告
- 编译原理实验报告 词法分析器实验报
- 西安科技大学编译原理往年期末试题
- 编译原理——语法分析器递归下降分
- 算术表达式的目标代码生成
- LL(1)语法分析 任意输入一个文法符
- 编译课程设计报告通过编程实现语法
- 编译原理 递归下降语法分析程序代码
- 对PL0语言及其编译器进行扩充和修改
- 编译原理大作业 完整编译器
- 编译原理课程设计——简单编译器
- 编译原理--词法分析器+语法分析器 源
- pl0语法分析器
- LR(0)语法分析的实现
评论
共有 条评论