java ll_LL(1)语法分析(java)

LL(1)语法分析(java)LL(1)语法分析(java)转:http://blog.csdn.net/new_one_object/article/details/50670624一、程序设计题目与说明通过运用编译原理课程所学知识,实现LL(1)文法的语法分析程序,当任意输入一个文法符号串,通过程序中先设定好确定的LL(1)预测分析表,按照预测分析算法对输入串进行语法分析,判断其是否为符合文法...
摘要由CSDN通过智能技术生成

LL(1)语法分析(java)

LL(1)语法分析(java)

转:http://blog.csdn.net/new_one_object/article/details/50670624

一、程序设计题目与说明

通过运用编译原理课程所学知识,实现LL(1)文法的语法分析程序,当任意输入一个文法符号串,通过程序中先设定好确定的LL(1)预测分析表,按照预测分析算法对输入串进行语法分析,判断其是否为符合文法规范的一个句子。如果符合文法规范则输出符号串、剩余输入串、规则等信息,否则输出错误信息

(自己加的,便于理解整个流程)简述:

init(),--》根节点E进栈,打印一行信息,不再用

totalControlProgram();,--》

1》第一步判断flag是true 则证明栈区有值,继续往下走,为false则栈区没有元素,退出

2》第二步判断栈顶元素是否是终结符,是终结符则直接pop出栈,缓冲区首字符也移除,打印输出信息

3》第三部判断栈顶元素是否为#有则匹配成功,flag设为false退出程序

4》第三步判断当前元素不为空,(如果到了这步,代表前面已经不是终结符#)把栈顶出栈,然后把得到的矩阵元素字符化后入栈

然后一步步往下走,遇见终结符就到《2》,遇到#就到《3》,遇到非终结符到《4》

二、全部代码

package downloadtest;

import java.util.Stack;

public class analyse {

// 加入同步符号的LL(1)分析表

private String[][] analysisTable = new String[][] { { "TZ", "", "", "TZ", "synch", "synch" },

{ "", "+TZ", "", "", "ε", "ε" }, { "FY", "synch", "", "FY", "synch", "synch" },

{ "", "ε", "*FY", "", "ε", "ε" }, { "i", "synch", "synch", "(E)", "synch", "synch" } };

// 存储终结符

private String[] VT = new String[] { "i", "+", "*", "(", ")", "#" };

// 存储非终结符

private String[] VN = new String[] { "E", "Z", "T", "Y", "F" };

// 输入串

private StringBuilder strToken;

// 分析栈

private Stack stack = new Stack();

// a保存从输入串中读取的一个输入符号,当前符号

private String a = null;

// X中保存stack栈顶符号

private String X = null;

// flag标志预测分析是否成功

private boolean flag = true;

// 记录输入串中当前字符的位置

private int cur = 0;

// 记录步数

private int count 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值