?? heng.java
字號:
}//for
}//if
else if(Character.isLetter(zhjian[0])||zhjian[0]=='_')
{
istrue=true;//開頭是下劃線或者字母則是合法變量
break;
}
else
{
istrue=false;
break;
}
}//if
}//for
if(istrue)
return true;
else return false;
}
//分析條件表達式是不是正確的
/*public String[] zhuan(String ss[],int chang)
{
String s[]=new String[chang];
for(int i=0;i<chang;i++)
{
if(ss[i].equals("<")||ss[i].equals(">")||ss[i].equals("=")||ss[i].equals("/")||ss[i].equals("*")||ss[i].equals("-")||ss[i].equals("+"))
{
s[i]=ss[i];
continue;
}
else
s[i]="i";
}
return s;
}*/
public String allString(String arg[]){
String s=null;
for(int i=0;i<arg.length;i++){
s+=arg[i];
}
return s;
}
public int isOperate(String c){
String s[]={"+","-","*","/","=","(",")","<",">"};
for(int i=0;i<s.length;i++){
if(c!=null&&c.equals(s[i])){
//System.out.println(c);
return 1;
}
}
return 0;
}
public void vertify(String input,String matrix[][],String s1[],String s2[],int num){
ArrayList list=new ArrayList();
StringTokenizer st=new StringTokenizer(input," \n\t\r;+=-*\"\'/)(}{[]<>?:!",true);
while(st.hasMoreTokens()){
list.add(new String(st.nextToken()));
}
String ci[]=new String[list.size()+1];
for(int e=0;e<list.size();e++){
ci[e]=list.get(e).toString();
}
ci[list.size()]="#";
String stack[]=new String[8];
for(int k=0;k<8;k++){
stack[k]="_";
}
stack[0]="E";
int point1=0;
int point2=0;
int length=ci.length;
//out.append(allString(stack)+allString(ci)+"\n");
for(int i=0;i<length-1;i++){
if(isOperate(ci[i])==0){
ci[i]="i";
}
}
//out.append(allString(stack)+allString(ci)+"\n");
while(true){
if(point1==-1&&point2==length-1){
// out.append("success"+"\n");
if(num==1)
tjTrue=true;
else if(num==2)
fz1True=true;
else if(num==3)
fz2True=true;
else if(num==4)
fz3True=true;
// out.append("suceedd");
break;
}
if(point1==-1){
// out.append(allString(stack)+allString(ci)+"\n");
//out.append("fail"+"\n");
break;
}
if(stack[point1].equals(ci[point2])){
stack[point1]="_";
ci[point2]="_";
point1--;
point2++;
//out.append(allString(stack)+allString(ci)+"\n");
continue;
}
String res=getString(stack[point1],ci[point2],matrix,s1,s2);
if(!res.equals("error")){
if(res.equals("0")){
stack[point1]="_";
point1--;
}
else{
char tem[] = res.toCharArray();
int tem2 = 0;
int length2 = tem.length;
for (int j = point1+length2-1; j > point1-1; j--) {
stack[j] = String.valueOf(tem[tem2]);
tem2++;
}
point1+= length2- 1;
}
//out.append(allString(stack)+allString(ci)+"\n");
}
if(res.equals("error")){
// out.append("the expression is error"+"\n");
break;
}
}
///out.append("over"+"\n");
}
public String getString(String m,String n,String matrix[][],String s1[],String s2[]){
//int h;
for(int i=0;i<s1.length;i++)
{
if(s1[i].equals(m))
{
// out.append("diyi");
for(int j=0;j<s2.length;j++)
{
if(s2[j].equals(n))
{
//out.append("dier");
if(matrix[i][j]!=null)
{
return matrix[i][j];
}
}
}
}
}
return "error";
}
/*
void getResult(String s){ //得到三元式
ArrayList list=new ArrayList();
StringTokenizer st=new StringTokenizer(s," \n\t\r;+=-*\"\'/)(}{[]<>?:!",true);
while(st.hasMoreTokens()){
list.add(new String(st.nextToken()));
}
String s1[]=new String[list.size()];
for(int e=0;e<list.size();e++){
s1[e]=list.get(e).toString();
}
String stack[]=new String[s1.length];
int point1=-1;
int point2=-1;
String result[]=new String[s1.length];
for(int l=0;l<s1.length;l++){
result[l]="_";
}
for(int i=0;i<s1.length;i++){
if(isOperate(s1[i])==0){
result[++point2]=s1[i];
}
else if(s1[i].equals("=")){
while (point1 != -1&&(stack[point1] .equals("=") || stack[point1].equals("*") ||stack[point1].equals("/")||stack[point1].equals("+")||stack[point1].equals("-"))) {
result[++point2] = stack[point1--];
}
stack[++point1]=s1[i];
}
else if(s1[i].equals("*")||s1[i].equals("/")){
stack[++point1] = s1[i];
}
else if(s1[i].equals("+")||s1[i].equals("-")){
while (point1 != -1&&(stack[point1] .equals("/") || stack[point1].equals("*"))) {
result[++point2] = stack[point1--];
}
stack[++point1] = s1[i];
}
else if(s1[i].equals("(")){
stack[++point1]=s1[i];
}
else if(s1[i].equals(")")){
while (point1 != -1&&!stack[point1] .equals("(")) {
result[++point2] = stack[point1--];
}
point1--;
}
}
while(point1!=-1){
result[++point2]=stack[point1--];
}
out.append("suffix:"+allString(result)+"\n");
int number=-1;
String tem6[]={"T1","T2","T3","T4","T5","T6","T7"};
for(int r=0;r<result.length;r++){
if(isOperate(result[r])==1){
int tem4=r-1;
int point4=0;
String str1=new String();
String str2=new String();
while(point4<2&&tem4>=0){
if(!result[tem4].equals("0")){
point4++;
if(point4==1){
str1=result[tem4];
result[tem4]="0";
}
if(point4==2){
str2=result[tem4];
result[tem4]="0";
}
}
tem4--;
}
number++;
String tem7=result[r];
result[r]=tem6[number];
out.append(result[r]+":"+"("+tem7+","+str1+","+str2+")"+"\n");
}
}
}*/
public boolean isZiFu(String a)
{
if(a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/"))
return true;
else
return false;
}
public void siyuanshi()
{
String siyuanshi[]=new String[100];
int qianzhui=100;//前綴標志
int siyuanjishu=0;//四元式的個數
int t1=1;//分別用于記錄規約后的非終結符
int t2=1;
int t3=1;
String zhi1[]=zhuanhouzhui(fzhi1,fuzhi1,1);//返回第一個賦值語句的后綴式
String zhi3[]=zhuanhouzhui(fzhi3,fuzhi3,3);//返回第一個賦值語句的后綴式
String zhi2[]=zhuanhouzhui(fzhi2,fuzhi2,2);//返回第一個賦值語句的后綴式
String tiao=String.valueOf((tongji1+3+100));
String tiao1=String.valueOf(tongji1+tongji2+tongji3+5+100);
for(int i=0;i<temzhi1;i++)//從前往后依次將第一個賦值語句轉化為四元式
{
int j=0,m=0;//用于記錄找到的操作符前面的兩個操作數
if(!isZiFu(zhi1[i]))//不是操作符就往后找,直到找到操作符
continue;
j=i;
while(zhi1[j-1].equals("0"))//找到一個不為0的操作數
j--;
String s1=zhi1[j-1];
m=j-1;
while(zhi1[m-1].equals("0"))
m--;
String s2=zhi1[m-1];
siyuanshi[siyuanjishu++]="("+"T"+t1+"="+s2+zhi1[i]+s1+")";
System.out.print(siyuanshi[siyuanjishu]);
zhi1[m-1]="T"+t1;//將第一個操作數處置為非終結符
zhi1[j-1]="0";//另外的操作數和操作符處置為0
zhi1[i]="0";
t1++;
}//for
siyuanshi[siyuanjishu++]="("+fzhi1[0]+"="+zhi1[0]+")";
//System.out.print(siyuanshi[siyuanjishu]);
//條件表達式
siyuanshi[siyuanjishu++]="if "+tj[0]+tj[1]+tj[2]+" goto "+tiao;
siyuanshi[siyuanjishu++]="goto "+tiao1;
for(int i=0;i<temzhi3;i++)
{
int j=0,m=0;
if(!isZiFu(zhi3[i]))
continue;
j=i;
while(zhi3[j-1].equals("0"))
j--;
String s1=zhi3[j-1];
m=j-1;
while(zhi3[m-1].equals("0"))
m--;
String s2=zhi3[m-1];
siyuanshi[siyuanjishu++]="("+"T"+t3+"="+s2+zhi3[i]+s1+")";
zhi3[m-1]="T"+t2;
zhi3[j-1]="0";
zhi3[i]="0";
t3++;
}//for
siyuanshi[siyuanjishu++]="("+fzhi3[0]+"="+zhi3[0]+")";
for(int i=0;i<temzhi2;i++)
{
int j=0,m=0;
if(!isZiFu(zhi2[i]))
continue;
j=i;
while(zhi2[j-1].equals("0"))
j--;
String s1=zhi2[j-1];
m=j-1;
while(zhi2[m-1].equals("0"))
m--;
String s2=zhi2[m-1];
siyuanshi[siyuanjishu++]="("+"T"+t2+"="+s2+zhi2[i]+s1+")";
zhi2[m-1]="T"+t2;
zhi2[j-1]="0";
zhi2[i]="0";
t2++;
}//for
siyuanshi[siyuanjishu++]="("+fzhi2[0]+"="+zhi2[0]+")";
siyuanshi[siyuanjishu++]="(-,-,-,-,)";
for(int m=0;m<siyuanjishu;m++)
{
out.append(qianzhui+++" "+siyuanshi[m]+"\n");//輸出四元式
}
}
public String[] zhuanhouzhui(String a[],int length,int biaozhi)
{
String tem[]=new String[10];//存放得到的后綴表達式
int temzhi0=0; //記錄后綴表達式的長度
String Stack[]=new String[length];//當作棧存放操作符
int pointer=-1;//棧指針
int tongji=0;
for(int i=2;i<length;i++)
{
if(a[i].equals("("))//如果為左括號則直接入棧
{
Stack[++pointer]=a[i];
}
else if(a[i].equals(")"))//碰到右括號 則把左括號以前的都取出來放到后綴式數組
{
while(pointer!=-1&&!(Stack[pointer].equals("(")))
{
System.out.print("dfsdfsdf");
tem[temzhi0++]=Stack[pointer--];
System.out.print(tem[temzhi0-1]+" !!");
}
pointer--;//丟掉左括號
}
else if(a[i].equals("+")||a[i].equals("-"))//把所有的號放到后綴式數組
{
tongji++;
while(pointer!=-1&&(Stack[pointer].equals("*")||Stack[pointer].equals("/")))
{
tem[temzhi0++]=Stack[pointer--];
//System.out.print(tem[temzhi0-1]+" !!");
}
Stack[++pointer]=a[i]; //然后把+-放到棧里
}
else if(a[i].equals("*")||a[i].equals("/"))//如果是則直接入棧
{
tongji++;
Stack[++pointer]=a[i];
}
else//否則是操作數則直接入后綴表達式數組
{
tem[temzhi0++]=a[i];
System.out.print(tem[temzhi0-1]+" !!");
}
}
while(pointer!=-1)//將所有的棧里面的操作符放到后綴表達式數組中
{
tem[temzhi0++]=Stack[pointer--];
System.out.print(tem[temzhi0-1]+" !!");
}
if(biaozhi==1)
{ temzhi1=temzhi0;//用于判斷是對哪個復制語句的后綴表達式轉化
tongji1=tongji;}
else if(biaozhi==2)
{
temzhi2=temzhi0;
tongji2=tongji;
}
else {
temzhi3=temzhi0;
tongji3=tongji;
}
return tem;
}
}//cfPanel
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -