文法分析java代码
import java.io.*;
public class GrammarAnalysis {
String filename;
File fr = new File("c:\\b.txt");
char buffer[]=new char[100];
char Te[]; //终结符数组
char NTe[]; //非终结符数组
String Pd[][]=new String[10][2]; //产生式数组
public GrammarAnalysis(String filename)
{
this.filename=filename;
}
public void readFile()throws FileNotFoundException
{
try
{
BufferedReader br = new BufferedReader(new FileReader(fr));
do
{
count=br.read(buffer);
}while(count!=-1);
br.close();
}
catch (Exception e)
{
System.out.println("文件操作错误:" + e.toString());
}
}
/*
功能:终结符判断
参数:当前字符
返回:boolean类型
*/
boolean Terminal(char ch)
{
if(ch>='a' && ch<='z')
return true;
else
return false;
}
/*
功能:非终结符判断
参数:当前字符
返回:boolean类型
*/
boolean NonTerminal(char ch)
{
if(ch>='A'&& ch<='A')
return true;
else
return false;
}
boolean Blank(char ch)
{
if(ch==' ')
return true;
else
return false;
}
public void Analysis()
{
String word="";
int p=0,q=0,m=0,n=0,i=0;
char ch=buffer[i];
while(Terminal(ch) || NonTerminal(ch)||Blank(ch))
{
word+=ch;
while(Blank(ch))
{
i++;
ch=buffer[i];
}
if(Terminal(ch)) //将当前字符存入终结符数组
{
Te[m]=ch;
m++;
}
else //非终结符数组
{
NTe[n]=ch;
n++;
}
i++;
ch=buffer[i];
if(ch==':') //表达式推导符号
{
Pd[p][q]=word;
q++;
word="";
i++;
ch=buffer[i];
continue;
}
if(ch==';') //一个表达时结束符号
{
Pd[p][q]=word;
p++;
word="";
i++;
ch=buffer[i];
}
}
/*
*参数:终结符数组,非终结符数组,表达式二维数组
*功能:判断文法的类型
*/
void GrammarType(char Te[],char NTe[],String Pd[][])
{
int count3=0;
boolean flag3=false;
int count2=0;
boolean flag2=false;
int count1=0;
for(int x=0;x<Pd.length;x++) //三型文法判断
{
for(int y=0;y<Pd[x][1].length();y++)
{
char ch3=Pd[x]
[1].charAt(y);
for(int z=0;z<Te.length;z++)
if(ch3==Te[z])
{
flag3=true;
break;
}
if(flag3=true)
{
flag3=false;
count3++;
break;
}
}
for(int z=0;z<Pd[x][0].length();z++) //二型文法判断
{
char ch2=Pd[x][0].charAt(z);
for(int t=0;t<Ne.length;t++)
if(ch2==Te[t])
{
flag2=true;
break;
}
if(flag2=true)
{
flag2=false;
count2++;
break;
}
if(Pd[x][1].length()>=Pd[x][0].length()) //一型文法判断
count1++;
}
if(count3==Pd.length)
System.out.println("该文法是3型文法!");
else if(count2==Pd.length)
System.out.println("该文法是2型文法!");
else if(count1==Pd.length)
System.out.println("该文法是1型文法!");
else
System.out.println("该文法是0型文法!");
}
}
/*
*参数:终结符数组,非终结符数组,表达式二维数组
*功能:输出该文法的相关信息
*/
void ToString(char Te[], char NTe[],String Pd[][]) //打印该文法信息
{
System.out.println("开始符:"+NTe[0]);
System.out.print("终结符:"+Te[0]);
for(int x=1;x<Te.length;x++)
System.out.print("、"+Te[x]);
System.out.println();
System.out.print("非终结符:"+NTe[0]);
for(int y=1;y<NTe.length;y++)
System.out.print("、"+NTe[y]);
System.out.println();
for(int a=Pd.length;a>=0;a--)
{
for(int b=0;b<a;b++)
if(Pd[a][0].equals(Pd[b][0]))
Pd[b][1]+=("|"+Pd[a][1]);
}
System.out.println("产生式:");
for(int c=0,c<Pd.length;c++)
System.out.print(Pd[c][0]+"->"+Pd[c][1]);
}
public static void main(Stri
ng args[])throws IOException
{
Le fr=new Le("C:\\b.txt");
fr.readFile();
fr.Analysis();
// fr.Analysis();
//fr.Analysis();
}
}
相关推荐:
- [公文资料]市场营销专员岗位职责
- [公文资料]综合部经理岗位职责
- [公文资料]会计助理岗位职责
- [公文资料]林业站站长职责
- [公文资料]菜品研发部岗位职责
- [公文资料]街道综治办工作职责
- [公文资料]酒店前台的工作职责
- [公文资料]销售部经理岗位职责
- [公文资料]工程部副经理岗位职责
- [公文资料]手术室护士工作职责
- [公文资料]银行客户经理职责
- [公文资料]汽车4s店市场专员职责
- [公文资料]服装店长工作职责
- [公文资料]采购总监岗位职责
- [公文资料]大学行政秘书工作职责
- [公文资料]学校财务人员岗位职责
- [公文资料]财务统计员岗位职责
- [公文资料]物业工程主管工作职责
- [公文资料]公司后勤工作职责
- [公文资料]采矿工程师岗位职责
- 门面出租合同样板(门面出租的合同)
- 自用房屋租赁合同 自住房租房合同(汇总
- 最新酒店劳动合同管理制度(11篇)(酒店
- 2025年无产权车库买卖合同实用(14篇)(
- 建筑工程农民工劳动合同十五篇(通用)(
- 最新深圳标准劳动合同 深圳劳动合同如
- 解除劳动合同通知书(实用6篇)(解除劳动
- 2025年二手房屋买卖合同范围精选(二十
- 最新融资贷款居间合同大全(22篇)(融资
- 2025年个人二手房屋买卖合同协议书四篇
- 2025年果树苗木买卖合约书 签订果树苗
- 广东省劳动合同书填写(21篇)(广东省劳
- 最新餐饮行业没有劳动合同 劳动法餐饮
- 农村土地买卖合同(汇总21篇)(农村土地
- 最新房屋转租合同模版21篇(通用)(标准
- 2025年进口合同号查询五篇(大全)(进口
- 农村建房包工包料合同(通用8篇)(农村建
- 2025年安装监控合同协议书(15篇)(2025
- 2025年企业租赁经营合同(模板9篇)(2025
- 最新郊区土地租赁合同(优质23篇)(最新




