package com.zwh.two;

import java.util.Scanner;

/**

*

* @author zhongwenhao

*

*题目:已知文法G: 试编写一个程序, 判断文法G所能接受的串。

E→TE'

E'→+TE' |ε

T→FT'

T'→*FT' |ε

F→(E) | i

*

*/

public class CRecursiveDescent {

public int i; // 此处用于指出要读的字符的位置,相当于语法意义上的单词的位置。

public char token; // 读出的字符,相当于语法意义上的特殊单词即保留字。

public Boolean isTrue; // 用于判断串是否为本语法识别。

public char[] SymbolString = new char[80]; // 用于存放要识别的串即语法单位。

public CRecursiveDescent(char[] SymbolString) {

this.SymbolString = SymbolString;

this.i = 0;

this.isTrue = true;

this.token = getToken();

}

// 调词法分析程序

public char getToken() {

if (i < SymbolString.length) {

return (SymbolString[i++]);

}

return ('\0');

}

public void match(char t) {

if (token == t)

token = getToken();

else

error(); // 出错处理程序

}

// 出错处理。

public void error() {

isTrue = false;

}

public void F() // F→(E) | i

{

if (this.token == 'i') {

match('i');

} else if (this.token == '(') {

match('c');

E();

match(')');

} else

error();

}

public void E() // E→TE'

{

T();

E1();

}

public void T1() // T'→*FT' |ε

{

if (token == '*') {

match('*');

F();

T1();

} else

;

}

public void E1() // E'→+TE' |ε

{

if (token == '+') {

match('+');

T();

E1();

} else

;

}

public void T() // T→FT'

{

F();

T1();

}

}

class Test {

public static void main(String[] args) {

String symbolstring;

String ch;

do {

System.out.printf("please input symbol string :\n");

Scanner input = new Scanner(System.in);

symbolstring = input.next();

//System.out.println(symbolstring);

CRecursiveDescent recursion = new CRecursiveDescent(

symbolstring.toCharArray());

recursion.E();

if (recursion.isTrue == false) {

System.out

.println("this grammar not accept the symbol string!");

System.out

.println("--------------------------------------------------");

} else {

System.out.println("this grammar accept the symbol string!");

System.out

.println("--------------------------------------------------");

}

System.out.printf("continue...:[y,n]? ");

ch = input.next();

while (!ch.equals("y") && !ch.equals("n"))

ch = input.next();

} while (ch.equals("y"));

}

}

递归下降分析程序 java_递归下降语法分析程序相关推荐

  1. java实现递归下降分析_使用递归实现检查未知层级目录中的文件-Java实用技能

    现在有这样一个需求,给你一个目录,需要你在此目录中查找全部名字中包含指定字符的文件. 这题的主要难点在于:目录中可能包含子目录,子目录中又会包含子目录.而我们事先没办法确定子目录到底有多少层!这时候就 ...

  2. 俄罗斯套娃程序java_原创(俄罗斯套娃程序) | 学步园

    自已花了一下午写的代码,自已也在学习程序的设计,供大家交流学习,交流才能促进学习进步!! 俄罗斯套娃奖品 伊万洛夫在比武大会上力克群雄,成为新一届"草原雄鹰",为部落赢得了莫大荣誉 ...

  3. 递归下降分析法实现强化计算器

    一. 实验概述 1.使用bison 和 flex 实现扩展版计算器 该计算器支持实型的两种表达,分别是小数和科学计数法. 该计算器支持 加, 减, 乘 除 四种运算 和括号()运算符. 该计算器支持整 ...

  4. 递归下降分析法(编译原理)

    递归下降分析法的实现方案 递归下降分析法的原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,具体实现方法概述如下: 1)每个非终结符对应一个解析函数: 2)产生式右侧为该产生式左侧非终结符所对 ...

  5. 10、Java 方法的递归调用详解(递归调用的分析和案例:阶乘、斐波那契、猴子吃桃)

    文章目录 一.递归缩写 二.递归调用 (1) 递归方式求累加和 (2) 递归内存分析 三.递归调用(概念) 四.递归调用举例 五.递归注意事项 六.斐波那契数列 七.猴子吃桃 一.递归缩写

  6. 自上而下的语法分析-递归下降分析和LL(1)文法

    对输入的任意单词符号串,试图用一切可能的办法,从文法开始符号(树根)出发,自上而下.自左而右地建立起一棵语法分析树,使得该树的叶结点自左而右地排列起来,刚好就是所给的输入串.显然,这一过程应该与一个最 ...

  7. 语法分析:自上而下分析(递归下降分析法+预测分析法)

    语法分析:自上而下分析 目录 语法分析:自上而下分析 知识背景 递归下降分析法 内容一:根据文法生成子程序 内容二:调用文法开始符号所对应的子程序 预测分析法 内容一:构造预测分析表 内容二:预测分析 ...

  8. 利用递归下降分析方法完成语法分析

    一. 程序设计题目与说明 利用递归下降分析方法完成语法分析. 递归下降分析法是一种自顶向下的分析方法,文法的每个非终结符对应一个递归过程(函数).分析过程就是从文法开始符出发执行一组递归过程(函数), ...

  9. 递归下降分析法的基本思想。_语法分析 | 递归下降分析算法

    递归下降分析算法是自顶向下分析算法的一部分. 递归下降分析算法 也称为预测分析 分析高效(线性时间) 容易实现(方便手工编码) 错误定位和诊断信息准确 被很多开源和商业的编译器所采用 GCC 4.0, ...

  10. 递归下降分析程序构造方法

    递归下降分析程序构造方法 作业要求   对于文法 E -> E + T | E – T | T T ->T * F | T / F | F F -> (E) | i 取消左递归后,改 ...

最新文章

  1. epoll ET模式服务器和客户端源码例子
  2. Windows2012使用笔记
  3. List for game to play latter
  4. 笑死!“盒马”把自己的ID给玩没了...
  5. 【AI产品】一键时光穿梭表情互动,这款FaceApp你知否?
  6. 全球及中国重型设备备件行业发展动态及未来趋势调研报告2021年版
  7. python web开发项目 源码_真零基础Python开发web
  8. 员工转正申请书_员工有了归属感 企业实现大发展!通机股份在党工共建中摸索经验...
  9. Please remove usages of `jcenter()` Maven repository from your build scripts and migrate your build
  10. 计算机网络常见面试真题详解
  11. linux screen -ls,Linux screen命令详解
  12. c gui qt 4编程第二版_我的QT5学习之路(一)——浅谈QT的安装和配置
  13. bigdata learning unit two--Spark environment setting
  14. 分享一个前后端分离的轻量级内容管理框架
  15. jquery 滑动取值
  16. RabbitMQ 消息队列
  17. C++编程语言中整型转换为字符串类型的方法
  18. 提高页面渲染速度的建议以及方案
  19. 自定义垂直方向滑动的ViewGroup
  20. SPSS入门教程—问卷的信度量化分析

热门文章

  1. 深度置信网络(Deep Belief Networks)DBN
  2. overleaf 改为XeLatex怎么操作
  3. python的pyaudio教程入门_Python音频操作工具PyAudio上手教程
  4. 从达尔文到DevOps:John Willis和Gene Kim谈后凤凰项目时代
  5. C语言--16进制转字符串
  6. Aerial为苹果而生,一款炫酷的Mac屏幕保护程序
  7. Scikit-learn_回归算法_支持向量机回归
  8. Java之棋牌游戏——编写一个斗地主洗牌发牌的程序,要求按照斗地主的规则完成洗牌发牌的过程
  9. CentOS7镜像安装与下载
  10. 强化学习——Q学习算法