资源简介
一、实验目的
实现一个递归下降语法分析程序,识别用户输入的算术表达式。
二、实验主要内容
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
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 递归下降分析器分析普通的四则运算
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- LL(1)文法的递归下降分析程序例题
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- pl/0编译器 语法分析
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- TINY+编译器 改编自原版TINY
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
评论
共有 条评论