LL(1)递归下降
来源:互联网 发布:网络直播电视怎么安装 编辑:程序博客网 时间:2024/05/17 04:12
package com.parting_soul.LL1Analyze;import java.util.Scanner;/** * 递归下降 * Created by parting_soul on 17-4-12. * <p> * S->AaS * S->BbS * S->d * A->a * B->^ * B->c * <p> * select(S->AaS) = {a} * select(S->BbS) = {b,c} * select(S->d) = {d} * select(A->a) = {a} * select(B->^) = {b} * select(B->c) = {c} */public class LL1Analyze { private String textContent; private int currentPos; private ErrorException exception; public LL1Analyze() { exception = new ErrorException("语法错误"); } public static void main(String[] args) { LL1Analyze analyze = new LL1Analyze(); Scanner in = new Scanner(System.in); String str = null; System.out.println("输入待匹配串:"); while ((str = in.nextLine()) != null) { analyze.setTextContent(str); try { analyze.start(); } catch (ErrorException e) { System.out.println(e.getMessage()); } analyze.init(); str = null; System.out.println("输入待匹配串:"); } } public void init() { currentPos = 0; textContent = null; } /** * 从开始符开始匹配 */ private void start() throws ErrorException { parseStart(); if (currentPos < textContent.length()) { //若未匹配完全,则也为语法错误 throw exception; } System.out.println("语法分析正确"); } private void error() throws ErrorException { throw exception; } public void setTextContent(String textContent) { this.textContent = textContent; } /** * 匹配终结符 * * @param pattern */ public void matchTerminal(char pattern) throws ErrorException { if (currentPos >= textContent.length()) throw exception; char currentC = textContent.charAt(currentPos); if (currentC != pattern) { error(); } else { currentPos++; } } private void parseStart() throws ErrorException { if (currentPos >= textContent.length()) throw exception; char currentC = textContent.charAt(currentPos); switch (currentC) { case 'a': //select(S->AaS) parseA(); matchTerminal('a'); parseStart(); break; case 'b': case 'c': //select(S->BbS); parseB(); matchTerminal('b'); parseStart(); break; case 'd': //select(S->d) matchTerminal('d'); break; default: error(); break; } } public void parseA() throws ErrorException { if (currentPos >= textContent.length()) throw exception; char currentC = textContent.charAt(currentPos); switch (currentC) { case 'a': //select(A->a) matchTerminal('a'); break; default: error(); break; } } public void parseB() throws ErrorException { if (currentPos >= textContent.length()) throw exception; char currentC = textContent.charAt(currentPos); switch (currentC) { case 'b': //select(B->^) break; case 'c': //select(B->c) matchTerminal('b'); break; default: error(); break; } }}class ErrorException extends Exception { public ErrorException(String msg) { super(msg); }}
0 0
- LL(1)递归下降
- 递归下降方法和LL(1)实现计算器C++
- 自上而下的语法分析(递归下降法,LL(1)预测分析法,预测分析表)
- 小试牛刀-递归下降算法(1)
- LL(1)
- 递归下降分析程序
- 递归下降分析法
- 递归下降分析子程序
- 递归下降子程序法
- 递归下降语法分析
- 递归下降分析法
- 递归下降的语法分析
- 递归下降的语法分析
- 递归下降语法分析程序设计
- 递归下降语法分析实验
- 递归下降分析
- 递归下降分析程序
- 递归下降语法分析实验
- 关于如何处理ubuntu16.04无法连接网络问题
- Beautiful People (zoj 2319)
- poj 3036 Honeycomb Walk 暴力枚举 dp
- java学习之:JDBC(查询)
- 简学jQuery技术
- LL(1)递归下降
- NYOJ 170
- (24)直接插入排序
- 区域的个数(坐标离散化)
- linux shell 中判断文件、目录是否存在
- EA&UML日拱一卒--类图::关联(关联,聚合,组合)
- 我的第一个Servlet小例子
- java学习之:fianlly语句和带资源的try语句
- Android Fragment和Activity数据或对象的传递总结