教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 公文资料 >

文法分析java代码

来源:网络收集 时间:2026-09-24
导读: 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 GrammarAn

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();
}
}

…… 此处隐藏:933字,全部文档内容请下载后查看。喜欢就下载吧 ……
文法分析java代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/711747.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)