实验二-LL1语法分析器
LL1语法分析范文
LL1语法分析范文
LL(1)语法分析是一种基于预测分析表的语法分析方法,它通过预测下一个输入符号,从而选择相应的产生式来推导语法树。在LL(1)语法分析中,L表示从左到右扫描输入,L表示最左推导,1表示每个输入符号有唯一的产生式。
LL(1)语法分析具有简单、高效和容易实现的特点,适用于上下文无关文法(CFG)的语法分析。LL(1)语法分析器可以通过构建预测分析表来实现,其中行代表文法符号,列表示下一个输入符号,表格的每个条目表示选择的产生式。由于LL(1)语法分析器使用的是确定性选择,它们可以在一次扫描中完成语法分析。
1.构建预测分析表。
2.初始化输入符号栈和语法树栈,将文法的起始符号设为输入符号栈的栈顶。
3.从输入中读取下一个符号a。
4.如果输入符号栈的栈顶是终结符号,则进行匹配。如果与a相等,则将栈顶和输入符号栈中的元素均弹出;如果不相等,则报错。
5.如果输入符号栈的栈顶是非终结符号,则在预测分析表中查找(栈顶,a)对应的产生式,将其逆序压入语法树栈,并将其右侧的非终结符号逆序压入输入符号栈。
6.重复步骤3-5,直到输入符号栈为空或者出错。
1. 对于每个产生式A -> α,计算First(α),将其加入预测分析表中。
2. 如果First(α)中包含ε,则将Follow(A)的元素加入预测分析
表中。
LL(1)语法分析器的优点是简单、高效,且容易实现。它可以在一次
扫描中完成语法分析,并可以通过构建预测分析表进行可预测的语法分析。因此,它是一种常用的语法分析方法,特别适用于上下文无关文法(CFG)。
LL1语法分析器_B12040921
实验报告
(2014/2015学年第二学期)
课程名称编译原理
实验名称语法分析器的构造
实验时间2015 年 5 月29 日指导单位计算机学院软件工程系
指导教师蒋凌云
学生姓名Cjj 班级学号B--------- 学院(系) 计算机学院专业NIIT
成绩批阅人日期
实验报告
print u"终结符"
print u"First集"
print u"Follow集"
print u"LL(1)分析表"
string1 = "i+i*i"
(string1)
string2 = "i*(i+i)"
(string2)
string3 = "i+i(i*i)i"
(string3)
实验结果:
编译原理实验报告《ll(1)语法分析器构造》
for(tmp=0;first[s][tmp]!='\0';tmp++)
{
a=first[s][tmp];
if(a!='^'&&first[r].find(a)==string::npos)//
将 FIRST[Y1]中的非空符加入
first[r].append(1,a);
} } if(!empty[s]) break;// 若 Y1 不能推导到空 .结束 } if(P[i][ j]==' ') if(first[r].find('^')==string::npos)
else GG[m].append(beta);
while(U.find(C)!=string::npos){C++;}
GG[m].append(1,C);
m++;
.
.
GG[m].append(1,C);GG[m].append("::=");
if(arfa.find('|')!=string::npos) GG[m].append("("+arfa+")");
while(step--)
{
for(i=0;i<k;i++) {
编译原理实验二语法分析器LL(1)实现
编译原理程序设计实验报告
——表达式语法分析器的设计班级:计算机1306班姓名:张涛学号:20133967实验目标:用LL(1)分析法设计实现表达式语法分析器
实验内容:
⑴概要设计:通过对实验一的此法分析器的程序稍加改造,使其能够输出正确的表达式的token序列。然后利用LL(1)分析法实现语法分析。
⑵数据结构:
int op=0; //当前判断进度
char ch; //当前字符
char nowword[10]=""; //当前单词
char operate[4]={'+','-','*','/'}; //运算符char bound[2]={'(',')'}; //界符
struct Token
{
int code;
char ch[10];
}; //Token定义
struct Token tokenlist[50]; //Token数组
struct Token tokentemp; //临时Token变量struct Stack //分析栈定义
{
char *base;
char *top;
int stacksize;
};
⑶分析表及流程图
逆序压栈
int IsLetter(char ch) //判断ch是否为字母
int IsDigit(char ch) //判断ch是否为数字
int Iskey(char *string) //判断是否为关键字
int Isbound(char ch) //判断是否为界符
int Isboundnum(char ch) //给出界符所在token值int init(STack *s) //栈初始化
编译原理实验二语法分析器LL(1)实现
编译原理程序设计实验报告
——表达式语法分析器的设计班级:计算机1306班姓名:张涛学号:实验目标:用LL(1)分析法设计实现表达式语法分析器
实验内容:
⑴概要设计:通过对实验一的此法分析器的程序稍加改造,使其能够输出正确的表达式的token序列。然后利用LL(1)分析法实现语法分析。
⑵数据结构:
int op=0;
逆序压栈
ase=(char*)malloc(100*s izeof(char));
if(!(*s).base)
exit(0);
(*s).top=(*s).base;
(*s).stacksize=100;
printf("初始化栈\n");
return 0;
}
int pop(STack *s,char *ch) op==(*s).base)
{
printf("弹栈失败\n");
return 0;
}
(*s).top--;
*ch=*((*s).top);
printf("%c",*ch);
return 1;
}
int push(STack *s,char ch) op-(*s).base>=(*s).stacksize)
{
(*s).base=(char*)realloc((*s).base,((*s).stacksize+10)*sizeof(char));
if(!(*s).base)
exit(0);
(*s).top=(*s).base+(*s).stacksize;
(*s).stacksize+=10;
}
*(*s).top=ch;
*(*s).top++;
return 1;
}
void LL1();
【实验2】LL(1)文法分析器
【实验2】LL(1)⽂法分析器
实验2 LL(1)⽂法分析
实验题⽬:编写LL(1)⽂法分析器
实验⽬的:加深对⽂法分析基本理论的理解,锻炼实现LL(1)⽂法分析器程序的实践能⼒。
要求:
实现基本LL(1)⽂法的功能。输⼊⽂法,能够求出FIRST集、FOLLOW集、预测分析表,同时,输⼊⼀串字符,输出分析过程。
⼀.需求分析
1.问题的提出:
语法分析是编译过程的核⼼部分,其任务是在词法分析识别单词符号串的基础上,分析并判断程序的的语法结构是否符合语法规则。语⾔的语法结构是⽤上下⽂⽆关⽂法描述的。因此语法分析器的⼯作的本质上就是按⽂法的产⽣式,识别输⼊符号串是否为⼀个句⼦。对于⼀个⽂法,当给出⼀串符号时,如何知道它是不是该⽂法的⼀个句⼦,这是本设计所要解决的⼀个问题。
2.问题解决:
其实要知道⼀串符号是不是该⽂法的⼀个句⼦,只要判断是否能从⽂法的开始符号出发,推导出这个输⼊串。语法分析可以分为两类,⼀类是⾃上⽽下的分析法,⼀类是⾃下⽽上的分析法。⾃上⽽下的主旨是,对任何输⼊串,试图⽤⼀切可能的办法,从⽂法开始符号出发,⾃上⽽下的为输⼊串建⽴⼀棵语法树。或者说,为输⼊串寻找⼀个最左推导,这种分析过程的本质是⼀种试探过程,是反复使⽤不同产⽣式谋求匹配输⼊串的过程。
3.解决步骤:
在⾃上⽽下的分析法中,主要是研究LL(1)分析法。它的解决步骤是,⾸先接收到⽤户输⼊的⼀个⽂法,对⽂法进⾏检测和处理,消除左递归,得到LL(1)⽂法,这个⽂法应该满⾜:⽆⼆义性,⽆左递归,⽆左公因⼦。当⽂法满⾜条件后,再分别构造⽂法每个⾮终结符的FIRST和FOLLOW集合,然后根据FIRST 和FOLLOW集合构造LL(1)分析表,最后利⽤分析表,根据LL(1)语法分析构造⼀个分析器。LL(1)的语法分析程序包含三个部分:总控程序,预测分析表函数,先进先出的语法分析栈。
编译原理实验二语法分析器LL(1)实现
编译原理程序设计实验报告
——表达式语法分析器的设计班级:计算机1306班:涛学号:20133967 实验目标:用LL(1)分析法设计实现表达式语法分析器
实验容:
⑴概要设计:通过对实验一的此法分析器的程序稍加改造,使其能够输出正确的表达式的token序列。然后利用LL(1)分析法实现语法分析。
⑵数据结构:
int op=0; //当前判断进度
char ch; //当前字符
char nowword[10]=""; //当前单词
char operate[4]={'+','-','*','/'}; //运算符
char bound[2]={'(',')'}; //界符
struct Token
{
int code;
char ch[10];
}; //Token定义
struct Token tokenlist[50]; //Token数组struct Token tokentemp; //临时Token变量struct Stack //分析栈定义
{
char *base;
char *top;
int stacksize;
};
⑶分析表及流程图
逆序压栈
int IsLetter(char ch) //判断ch是否为字母
int IsDigit(char ch) //判断ch是否为数字
int Iskey(char *string) //判断是否为关键字
int Isbound(char ch) //判断是否为界符
int Isboundnum(char ch) //给出界符所在token值int init(STack *s) //栈初始化
实验二--LL(1)分析法实验报告
实验二LL(1)分析法
一、实验目的
通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。
二、实验内容及设计原理
所谓LL(1)分析法,就是指从左到右扫描输入串(源程序),同时采用最左推导,且对每次直接推导只需向前看一个输入符号,便可确定当前所应当选择的规则。实现LL(1)分析的程序又称为LL(1)分析程序或LL1(1)分析器。
我们知道一个文法要能进行LL(1)分析,那么这个文法应该满足:无二义性,无左递归,无左公因子。当文法满足条件后,再分别构造文法每个非终结符的FIRST和FOLLOW集合,然后根据FIRST和FOLLOW集合构造LL(1)分析表,最后利用分析表,根据LL(1)语法分析构造一个分析器。LL(1)的语法分析程序包含了三个部分,总控程序,预测分析表函数,先进先出的语法分析栈,本程序也是采用了同样的方法进行语法分析,该程序是采用了C++语言来编写,其逻辑结构图如下:
LL(1)预测分析程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输入符号a做哪种过程的。对于任何(X,a),总控程序每次都执行下述
三种可能的动作之一:
(1)若X = a =‘#’,则宣布分析成功,停止分析过程。
(2)若X = a ‘#’,则把X从STACK栈顶弹出,让a指向下一个输入符号。
(3)若X是一个非终结符,则查看预测分析表M。若M[A,a]中存放着关于X的一个产生式,那么,首先把X弹出STACK栈顶,然后,把产生式的右部符号串按反序一一弹出STACK栈(若右部符号为ε,则不推什么东西进STACK栈)。若M[A,a]中存放着“出错标志”,则调用出错诊断程序ERROR。
LL1语法分析器_B12040921
.
实验报告
(2014/2015学年第二学期)
课程名称编译原理
实验名称语法分析器的构造
实验时间2015 年 5 月29 日指导单位计算机学院软件工程系
指导教师蒋凌云
学生姓名Cjj 班级学号B--------- 学院(系) 计算机学院专业NIIT
成绩批阅人日期
实验报告
print ll1am.noLeftRecursionGrammers
print u"非终极符"
print ll1am.nChars
print u"终结符"
print ll1am.tChars
print u"First集"
pprint.pprint(ll1am.firstSet)
print u"Follow集"
pprint.pprint(ll1am.followSet)
print u"LL(1)分析表"
pprint.pprint(ll1am.analyseTable)
string1 = "i+i*i"
ll1am.Judge(string1)
string2 = "i*(i+i)"
ll1am.Judge(string2)
string3 = "i+i(i*i)i"
ll1am.Judge(string3)
实验结果:
实验二 语法分析器
实验二自上而下的语法分析器
一、实验目的
设计、编制并调试一个自下而上的语法分析程序(非递归),加深对LL(1)文法,预测分析表的理解并实现对简单文法句子的分析。
二、设计要求
编写预测法分析程序,对于给定的文法和词法分析器得到的句子能够给出分析过程结束。
测试数据:
简单算术运算文法G[E]:
E→TR
R → +TR|ε
T→FW
W→*FW |ε
F→(E) |i
(1)手工计算非终结符的FIRST和FOLLOW集合
判断是否是LL(1)文法
(2)手工计算该文法的预测分析表,存储在数组中
输出要求
(1)编写代码输出该文法的预测分析表
(2)输出符号串i+i*i的分析过程
三、实验结果
文法:
预测分析表:
符号串i+i*i的分析过程
四.实验总结
1.源代码
2.总结和体会
实行二LL1语法分析器
曲阜师范大学实验报告
No. 2010416573 计算机系2010年级网络工程二班组日期2012-10-9
姓名王琳
课程编译原理成绩教师签章陈矗
实验名称: LL(1)语法分析器实验报告
【实验目的】
1. 了解LL(1)语法分析是如何根据语法规则逐一分析词法分析所得到的单
词,检查语法错误,即掌握语法分析过程。
2. 掌握LL(1)语法分析器的设计与调试。
【实验内容】
文法:
E ->TE’ ,E’-> +TE‘ | ,T-> FT’ ,T’->* FT’ | ,F-> (E ) |i
针对上述文法,编写一个LL(1)语法分析程序:
1. 输入:诸如i i *i 的字符串,以#结束。
2. 处理:基于分析表进行LL(1)语法分析,判断其是否符合文法。
3. 输出:串是否合法。
【实验要求】
1. 在编程前,根据上述文法建立对应的、正确的预测分析表。
2. 设计恰当的数据结构存储预测分析表。
3. 在C、C++、Java 中选择一种擅长的编程语言编写程序,要求所编写的程
序结构清晰、正确。
【实验环境】
1.此算法是一个java 程序,要求在eclipse软件中运行
2.硬件windows 系统环境中
【实验分析】
读入文法,判断正误,如无误,判断是否是LL(1)文法,若是构造分析表
【实验程序】
package llyufa;
public class Accept2 {
public static StringBuffer stack=new StringBuffer("#E");
public static StringBuffer stack2=new StringBuffer("i+i*i+i#");
编译原理实验二:LL(1)语法分析器
编译原理实验⼆:LL(1)语法分析器
⼀、实验要求
1. 提取左公因⼦或消除左递归(实现了消除左递归)
2. 递归求First集和Follow集
其它的只要按照课本上的步骤顺序写下来就好(但是代码量超多...),下⾯我贴出实验的⼀些关键代码和算法思想。
⼆、基于预测分析表法的语法分析
2.1 代码结构
2.1.1 Grammar类
功能:主要⽤来处理输⼊的⽂法,包括将⽂法中的终结符和⾮终结符分别存储,检测直接左递归和左公因⼦,消除直接左递归,获得所有⾮终结符的First集,Follow集以及产⽣式的Select集。
#ifndef GRAMMAR_H
#define GRAMMAR_H
#include <string>
#include <cstring>
#include <iostream>
#include <vector>
#include <set>
#include <iomanip>
#include <algorithm>
using namespace std;
const int maxn = 110;
//产⽣式结构体
struct EXP{
char left; //左部
string right; //右部
};
class Grammar
{
public:
Grammar(); //构造函数
bool isNotTer(char x); //判断是否是终结符
int getTer(char x); //获取终结符下标
LL(1)语法分析器实验总报告书
LL(1)语法分析器实验报告书
小组负责人:潘豪 SWE08030
小组成员:邹杰光 SWE08018
叶凯翔 SWE08039
张志峰 SWE08046
许英俊 SWE08062
厦门大学嘉庚学院计算机系软件工程班课程小组
2010年7月
目录
第一章概述 (3)
1.1 开发平台 (3)
1.2 实验目的 (3)
1.3 实验要求 (3)
第二章语法分析器的实现 (3)
2.1 LL(1)语法分析器原理 (3)
2.2 求出能推出空的终结符 (4)
2.3 FIRST集的确定 (4)
2.4 FOLLOW集的确定 (4)
2.5 SELECT集的确定 (4)
2.6 LL(1)文法的判别 (4)
2.7 逻辑结构 (4)
2.8 预测分析表的生成 (5)
2.9 句子的判定 (5)
2.10 其他说明 (5)
第三章系统运行与测试 (6)
3.1 程序运行环境 (6)
3.2 运行界面 (6)
3.3 系统测试 (8)
第四章总述 (11)
4.1 程序综述 (11)
4.2小组工作总结 (11)
第一章概述
1.1 开发平台
本程序基于Microsoft Visual Studio 2008开发,使用C#语言。
1.2 实验目的
掌握LL(1)分析法的基本原理,掌握LL(1)分析表的构造方法,掌握LL(1)驱动程序的构造方法。
1.3 实验要求
编写一个语法分析器,不限语言,方法。
第二章语法分析器的实现
2.1 LL(1)语法分析器原理
语法分析是编译过程的核心部分,它的主要任务是按照程序的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行词法检查,为语义分析和代码生成作准备。这里采用自顶向下的LL(1)分析方法。
编译原理课程设计-LL(1)语法分析器的构造
LL(1)语法分析器的构造
摘要
语法分析的主要任务是接收词法分析程序识别出来的单词符由某种号串,判断它们是否语言的文法产生,即判断被识别的符号串是否为某语法部分。
一般语法分析常用自顶向下方法中的LL分析法,采用种方法时,语法分程序将按自左向右的顺序扫描输入的的符号串,并在此过程中产生一个句子的最左推导,即LL是指自左向右扫描,自左向右分析和匹配输入串。
经过分析,我们使用VC++作为前端开发工具,在分析语法成分时比较方便直观,更便于操作。运行程序的同时不断修正改进程序,直至的到最优源程序。
关键字
语法分析文法自顶向下分析 LL(1)分析最左推导
Abstract
Grammatical analysis of the main tasks was to receive lexical analysis procedure to identify the words from a website, string, and judge whether they have a grammar of the language, that is, judging by the series of symbols to identify whether a grammar part. General syntax analysis commonly used top-down methods of LL analysis, using methods, Grammar hours will be from the procedures of the order left-to-right scanning input string of symbols, and in the process produced one of the most left the sentence is derived, LL is scanned from left to right, From left to right analysis and matching input strings. After analysis, we use VC + + as a front-end development tool for the analysis of syntax ingredients more convenient visual, more easy to operate. Operational procedures at the same time constantly improving procedures, until the source of optimal .
编译原理实验二LL(1)语法分析实验报告
专题3_LL(1)语法分析设计原理与实现
李若森 13281132 计科1301
一、理论传授
语法分析的设计方法和实现原理;LL(1) 分析表的构造;LL(1)分析过程;LL(1)分析器的构造。
二、目标任务
实验项目
实现LL(1)分析中控制程序(表驱动程序);完成以下描述算术表达式的 LL(1)文法的LL(1)分析程序。
G[E]:
E→TE’
E’→ATE’|ε
T→FT’
T’→MFT’|ε
F→(E)|i
A→+|-
M→*|/
设计说明
终结符号i为用户定义的简单变量,即标识符的定义。加减乘除即运算符。
设计要求
(1)输入串应是词法分析的输出二元式序列,即某算术表达式“专题 1”的输出结果,
输出为输入串是否为该文法定义的算术表达式的判断结果;
(2)LL(1)分析程序应能发现输入串出错;
(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。
任务分析
重点解决LL(1)表的构造和LL(1)分析器的实现。
三、实现过程
实现LL(1)分析器
a)将#号放在输入串S的尾部
b)S中字符顺序入栈
c)反复执行c),任何时候按栈顶Xm和输入ai依据分析表,执行下述三个动作之一。
构造LL(1)分析表
构造LL(1)分析表需要得到文法G[E]的FIRST集和FOLLOW集。
构造FIRST(α)
构造FOLLOW(A)
构造LL(1)分析表算法
根据上述算法可得G[E]的LL(1)分析表,如表3-1所示:
表3-1 LL(1)分析表
主要数据结构
pair:
用pair来存储单个二元组。该对照表由专题1定义。
map:
存储离散化后的终结符和非终结符。
ll 1 语法分析实验报告
ll 1 语法分析实验报告
语法分析实验报告
一、引言
语法分析是编译器中的重要步骤之一,它负责将输入的源代码转化为语法树或抽象语法树,以便后续的语义分析和代码生成。本实验旨在通过实现一个简单的LL(1)语法分析器,加深对语法分析原理和算法的理解。
二、实验目的
1. 理解LL(1)语法分析的原理和算法;
2. 掌握使用LL(1)文法描述语言的方法;
3. 实现一个简单的LL(1)语法分析器。
三、实验环境
本实验使用C++编程语言,开发环境为Visual Studio。
四、实验步骤
1. 设计LL(1)文法
在开始实现LL(1)语法分析器之前,我们需要先设计一个LL(1)文法。LL(1)文法是一种满足LL(1)分析表构造要求的文法,它能够保证在语法分析过程中不会出现二义性或回溯。通过仔细分析待分析的语言的语法规则,我们可以设计出相应的LL(1)文法。
2. 构造LL(1)分析表
根据设计的LL(1)文法,我们可以构造出对应的LL(1)分析表。LL(1)分析表是一个二维表格,其中的行表示文法的非终结符,列表示文法的终结符。表格中的每个元素表示在某个非终结符和终结符的组合下,应该进行的语法分析动作。
3. 实现LL(1)语法分析器
基于构造的LL(1)分析表,我们可以开始实现LL(1)语法分析器。分析器的主要
工作是根据输入的源代码和LL(1)分析表进行分析,并输出语法树或抽象语法树。
五、实验结果与分析
经过实验,我们成功实现了一个简单的LL(1)语法分析器,并对一些简单的语言
进行了分析。实验结果表明,我们设计的LL(1)文法和LL(1)分析表能够正确地进行语法分析,没有出现二义性或回溯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二LL(1)分析法
一、实验目的
通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。
二、实验内容
◆根据某一文法编制调试LL (1 )分析程序,以便对任意输入的符号串
进行分析。
◆构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分
析程序。
◆分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号
以及LL(1)分析表,对输入符号串自上而下的分析过程。
三、LL(1)分析法实验设计思想及算法
◆模块结构:
(1)定义部分:定义常量、变量、数据结构。
(2)初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);
(3)控制部分:从键盘输入一个表达式符号串;
(4)利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。
四、实验要求
1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。
2、如果遇到错误的表达式,应输出错误提示信息。
3、对下列文法,用LL(1)分析法对任意输入的符号串进行分析:(1)E->TG
(2)G->+TG|—TG
(3)G->ε
(4)T->FS
(5)S->*FS|/FS
(6)S->ε
(7)F->(E)
(8)F->i
输出的格式如下:
五、实验源程序
LL1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.sql.*;
import java.util.Vector;
public class LL1 extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JTextField tf1;
JTextField tf2;
JLabel l;
JButton b0;
JPanel p1,p2,p3;
JTextArea t1,t2,t3;
JButton b1,b2,b3;
JLabel l0,l1,l2,l3,l4;
JTable table;
Statement sta;
Connection conn;
ResultSet rs;
DefaultTableModel dtm;
String Vn[]=null;
Vector
int firstComplete[]=null;//存储已判断过first的数据
char first[][]=null;//存储最后first结果
int followComplete[]=null;//存储已判断过follow的数据
char follow[][]=null;//存储最后follow结果
char select[][]=null;//存储最后select结果
int LL=0;//标记是否为LL(1)
String vt_tou[]=null;//储存Vt
Object shuju[][]=null;//存储表达式数据
char yn_null[]=null;//存储能否推出空
LL1()
{
setLocation(100,0);
setSize(700,780);
tf1=new JTextField(13);
tf2=new JTextField(13);
l=new JLabel(">>");
l0=new JLabel("输入字符串:");
l1=new JLabel("输入的文法为:");
l2=new JLabel(" ");
l3=new JLabel("分析的结果:");
l4=new JLabel("预测分析表:");
//p1=new JPanel();
p2=new JPanel();
p3=new JPanel();
t1=new JTextArea(24,20);
t2=new JTextArea(1,30);
t3=new JTextArea(24,40);
b0=new JButton("确定(S为开始)");
b1=new JButton(" 判断文法 ");
b2=new JButton("输入");
b3=new JButton("清空");
table=new JTable();
JScrollPane jp1=new JScrollPane(t1);
JScrollPane jp2=new JScrollPane(t2);
JScrollPane jp3=new JScrollPane(t3);
p2.add(tf1);
p2.add(l);
p2.add(tf2);
p2.add(b0);
p2.add(b1);
p2.add(l0);
p2.add(l2);
p2.add(jp2);
p2.add(b2);
p2.add(b3);
p2.add(l1);
p2.add(l3);
p2.add(jp1);
p2.add(jp3);
p3.add(l4);
p3.add(new JScrollPane(table));
add(p2,"Center");
add(p3,"South");
b0.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table.setPreferredScrollableViewportSize(new Dimension(660,200));
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b0)
{
String a=tf1.getText();
String b=tf2.getText();