package org.test;
import org.test.WordAnalyzer;
public class RecursiveDescentAnalyzer {
WordAnalyzer wa = new WordAnalyzer();
boolean isError = false;
public void lrparser() {
if (wa.syn == 1) { //“begin”
wa.scaner();
yujuchuan();
if (wa.syn == 6) { //“end”
wa.scaner();
if (wa.syn == 0 && isError == false) //“end”之后是“#”并且没有出错,则分析成功
System.out.println("语法分析成功!");
} else {
if (isError == false) //之前分析都成功,但没有“end”
System.out.println("语法分析出错!缺少“end”");
isError = true;
}
} else {
System.out.println("语法分析出错!缺少“begin”");
isError = true;
}
}
/*
* 分析语句串
*/
public void yujuchuan() {
statement(); //分析第一条语句
while (wa.syn == 26) {// 为“;”时,分析下一条语句
wa.scaner();
if (wa.syn == 6) break;
statement();
}
}
/*
* 分析语句
*/
public void statement() {
if (wa.syn == 10) { //语句的开始是标识符,读下一个单词符号
wa.scaner();
if (wa.syn == 18) { //为“:=” 赋值时,分析表达式
wa.scaner();
expression();
} else {
System.out.println("语法分析出错!表达式错误");
isError = true;
}
} else {
System.out.println("语法分析出错!语句错误");
isError = true;
}
}
/*
* 分析表达式
*/
public void expression() {
term(); //分析第一项
while (wa.syn == 13 || wa.syn == 14) { // 为“+”或“-”时,分析下一项
wa.scaner();
term();
}
}
/*
* 分析表达式的项
*/
public void term() {
factor(); //分析第一个因子
while (wa.syn == 15 || wa.syn == 16) { //为“*”或“/”时,分析下一个因子
wa.scaner();
factor();
}
}
/*
* 分析项的因子
*/
public void factor() {
if (wa.syn == 10 || wa.syn == 11) //为标识符或整数时,这一项分析结束
wa.scaner();
else if (wa.syn == 27) { //为“(”时,分析“(”里的表达式
wa.scaner();
expression();
if (wa.syn == 28) //表达式分析结束且下一个单词符号为“)”时,这一项分析结束
wa.scaner();
else { //表达式分析结束且下一个单词符号不是“)”,分析出错
System.out.println("语法分析出错!缺少“)”");
isError = true;
}
} else {
System.out.println("语法分析出错!表达式错误");
isError = true;
}
}
public static void main(String[] args) {
RecursiveDescentAnalyzer test = new RecursiveDescentAnalyzer();
System.out.println("********************语法分析程序********************");
test.wa.read();
test.wa.scaner();
test.lrparser();
System.out.println("语法分析结束!");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
参考C语言版本,用Java写的递归下降分析程序,能对词法分析程序所提供的单词序列进行语法检查和结构分析。被分析的语言应该是PL/0,语法表示如下: (1)<程序>::=begin<语句串>end (2)<语句串>::=<语句>{;<语句>} (3)<语句>::=<赋值语句> (4)<赋值语句>::=ID:=<表达式> (5)<表达式>::=<项>{+<项> | —项>} (6)<项>::=<因子>{*<因子> | /<因子>} (7)<因子>::=ID | NUM | (<表达式>) 用Eclipse做的,有运行结果截图。
资源推荐
资源详情
资源评论
收起资源包目录
实验三_递归下降分析法.zip (6个子文件)
src
org
test
WordAnalyzer.java 2KB
RecursiveDescentAnalyzer.java 3KB
.classpath 232B
实验结果1.PNG 6KB
实验结果2.PNG 6KB
.project 407B
共 6 条
- 1
资源评论
Ericucia
- 粉丝: 7
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功