編譯原理(用c語言編寫小型詞法分析器)

2021-08-21 02:23:30 字數 2083 閱讀 5379

學過編譯原理的同學一定知道詞法分析,那麼詞法分析如何用c語言實現呢?

精力有限,做的詞法分析器只能分析以下幾種

編寫程式前需要狀態表

,,,,};\\轉換表

char code[1000];//存輸入的字串

char put[100][100];//存入得出的結果

char ch;//獲得輸入字串的乙個字元

int i=0,j=0,k=0,p,m=0,n=0;

char chucun[100];//訪問出的值eg int i=5;先將int取出來存入 

printf("小型詞法分析器\n");

printf("請輸入程式,程式以#結束\n");

while((ch=getchar())!='#')

code[i]='\0';

while(ipos

else if((code[ipos]>='a'&&code[ipos]<='z')||(code[ipos]>='a'&&code[ipos]<='z'))

else if(code[ipos]=='.')

if(nextistate==-1)

else if(nextistate>0)

}else

else if(strcmp(chucun,"int")==0)

else if(strcmp(chucun,"float")==0)

else

else

} else if(chucun[p]=='.')

else 

else

}}}}

memset(chucun,0,sizeof(chucun));

j=0;

}if(code[ipos]=='+')

else if(code[ipos]=='-')

else if(code[ipos]=='=')

else if(code[ipos]==';')

else if(code[ipos]=='(')

else if(code[ipos]==')')

else if(code[ipos]=='

else if(code[ipos]=='}')

");strcpy(put[k],"詞類編碼:12           屬性:分界符");

n=n+1;

}else if(code[ipos]==' ')

else if(code[ipos]=='\n')

else

}*buffer=null;

}ipos++;

}if(j!=0)

else if(strcmp(chucun,"int")==0)

else if(strcmp(chucun,"float")==0)

else 

else

} else if(chucun[p]=='.')

else 

else

}}}}

memset(chucun,0,sizeof(chucun));

}if(tag!=0) } 

}else if((n%2)!=0) 

不完整");

}else if((m%2)!=0) 

}return 0;

}

編譯原理 用Lex做詞法分析

08年9月入學,12年7月畢業,結束了我在軟體學院愉快豐富的大學生活。此系列是對四年專業課程學習的回顧,索引參見 用lex建立乙個詞法分析器 衝突解決規則 1 總是選擇最長的字首 2 如果最長的可能字首與多個模式匹配,總是選擇lex中先被列出的模式。安裝parser generator,並編譯lex...

編譯原理詞法分析程式設計(C )

1.對源程式進行理解,從pl0文件中抽取出詞法部分的 單獨作為乙個程式,變成乙個詞法程式,用visual6.0或者dev c 進行編譯,編譯成為可執行檔案 詞法分析部分的 如下 include include include include include include include inclu...

編譯原理 C語言詞法分析器

本程式預設的種別碼的編碼 主介面 功能1提到的input.txt檔案的內容可以是任意c語言 這裡我的input.txt隨便打了一段c語言 進入1功能,直接從input.txt檔案讀取 這裡沒寫路徑輸入,必須把input.txt和本程式的cpp檔案放在同一目錄下 經過分析後得到結果 沒做清屏處理,寫得...