亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言實現詞法分析器

2020-01-26 13:32:49
字體:
來源:轉載
供稿:網友

問題描述:

用C或C++語言編寫一個簡單的詞法分析程序,掃描C語言小子集的源程序,根據給定的詞法規則,識別單詞,填寫相應的表。如果產生詞法錯誤,則顯示錯誤信息、位置,并試圖從錯誤中恢復。簡單的恢復方法是忽略該字符(或單詞)重新開始掃描。

相關詞法規則

<標識符>::=<字母>
<標識符>::=<標識符><字母>
<標識符>::=<標識符><數字>
<常量>::=<無符號整數>
<無符號整數>::=<數字序列>
<數字序列>::=<數字序列><數字>
<數字序列>::=<數字>
<字母>::=a|b|c|……|x|y|z
<數字>::=0|1|2|3|4|5|6|7|8|9
<加法運算符>::=+|-
<乘法運算符>::=*|/
<關系運算符>::=<|>|!=|>=|<=|==
<分界符>::=,|;|(|)|{|}
<保留字>::=main|int|if|else|while|do

編寫詞法分析程序的步驟:

(1)確定所要翻譯的語言(或其子集)。

C語言

(2)設計屬性字,及各類表格,如標識符表、常量表、符號及其機內表示對照表等。

與詞法分析有關的表格:

1. 字符表

保留字:main,int,if,else,while,do
字母(全小寫):a|b|c|……|x|y|z
數字:0,1,2,3,4,5,6,7,8,9
運算符和界符:<,>,!=,>=,<=,==,,,;,(,),{,}

2. 特定單詞機內表示表

3.畫出總控流程圖及各個子程序的流程圖。

4. 程序

輸入:一個存放C語言程序的s.txt文件
輸出:存放以(單詞,種別碼)形式輸出的result.txt文件

需要6個數組:

1. 存儲關鍵字 key[6]
2. 存儲對應下標關鍵字的種別碼 keyNum[6]
3. 存儲運算符和界符 symbol[17]
4. 存儲運算符對應下標的種別碼 symbolNum[17]
5. 存儲從文件中取出的每個字符(不包括括號)letter[1000]

主要函數:

TakeWord();

功能:將文件letter[]中每個字符進行提取,找出關鍵字,輸出種別碼

Num作為全局變量保存提取到字符的哪個下標

1. 先提取一個字符,如果是字母,進入case1,調用identifier(),不斷的提取字母或數字進行連接,沒連接一個字符用int isKeyWord()程序(返回關鍵字種別碼)判斷是否為關鍵字,是就退出函數返回string,不是就繼續執行函數,直到連接的字符不再是字母或數字,即此時字符串為標識符

2. 如果是數字,進入case 2,調用Number()函數,不斷進行字符串連接,知道下一個連接字符不再是數字

3. 如果是符號,進入case 3,調用symbolStr()函數,如果是=,>,<,!,則要繼續進行下個字符判斷,其余符號可以直接返回

其他輔助函數:

int isSymbol()判斷運算符和界符,并返回種別碼
bool isNum() 判斷是否為數字
bool isLetter()判斷是否為字母
int isKeyWord()判斷是否為關鍵字,是返回種別碼
int typeword()返回單個字符的類型
string identifier()標識符的連接
string symbolStr()符號和界符的連接
string Number()數字的連接
void print()輸出

程序:

#include <iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>using namespace std;//關鍵字 string key[6]={"main","int","if","else","while","do"}; //關鍵字的種別碼int keyNum[6]={1,2,3,4,5,6}; //運算符和界符 string symbol[17]={"<",">","!=",">=","<=","==",",",";","(",")","{","}","+","-","*","/","="};//char symbol[12]={'<','>','!=','>=','<=','==',',',';','(',')','{','}'};//運算符和界符的種別碼 int symbolNum[17]={7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};//存放文件取出的字符 string letter[1000];//將字符轉換為單詞string words[1000];int length; //保存程序中字符的數目 int num;int isSymbol(string s){ //判斷運算符和界符  int i; for(i=0;i<17;i++){  if(s==symbol[i])   return symbolNum[i];  } return 0;} //判斷是否為數字 bool isNum(string s){ if(s>="0" && s<="9")  return true; return false;}//判斷是否為字母 bool isLetter(string s){ if(s>="a" && s<="z")  return true; return false;}//判斷是否為關鍵字,是返回種別碼 int isKeyWord(string s){ int i; for(i=0;i<6;i++){  if(s==key[i])   return keyNum[i]; } return 0;}//返回單個字符的類型 int typeword(string str){ if(str>="a" && str<="z") // 字母   return 1; if(str>="0" && str<="9") //數字   return 2; if(str==">"||str=="="||str=="<"||str=="!"||str==","||str==";"||str=="("||str==")"||str=="{"||str=="}"  ||str=="+"||str=="-"||str=="*"||str=="/") //判斷運算符和界符   return 3; }string identifier(string s,int n){ int j=n+1; int flag=1; while(flag){  if(isNum(letter[j]) || isLetter(letter[j])){   s=(s+letter[j]).c_str();   if(isKeyWord(s)){    j++;    num=j;    return s;   }   j++;  }  else{   flag=0;  } }  num=j; return s;}string symbolStr(string s,int n){ int j=n+1; string str=letter[j]; if(str==">"||str=="="||str=="<"||str=="!") {  s=(s+letter[j]).c_str();  j++; } num=j; return s;}string Number(string s,int n){ int j=n+1; int flag=1; while(flag){  if(isNum(letter[j])){   s=(s+letter[j]).c_str();   j++;  }  else{   flag=0;  } } num=j; return s;}void print(string s,int n){ cout<<"("<<s<<","<<n<<")"<<endl;}void TakeWord(){ //取單詞  int k; for(num=0;num<length;){  string str1,str;  str=letter[num];  k=typeword(str);  switch(k){   case 1:    {     str1=identifier(str,num);     if(isKeyWord(str1))      print(str1,isKeyWord(str1));     else      print(str1,0);     break;    }   case 2:    {     str1=Number(str,num);     print(str1,24);     break;    }   case 3:    {     str1=symbolStr(str,num);     print(str1,isSymbol(str1));     break;     }  } } }int main(){ char w; int i,j; freopen("s.txt","r",stdin); freopen("result.txt","w",stdout); //從控制臺輸出,而不是文本輸出 length=0; while(cin>>w){  if(w!=' '){   letter[length]=w;   length++;  } //去掉程序中的空格 } TakeWord();// for(j=0;j<length;j++){//  cout<<letter[j]<<endl;// }  fclose(stdin);//關閉文件  fclose(stdout);//關閉文件  return 0;} 

運行結果:

s.txt

Result.txt

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品成人网| 精品久久久久久久大神国产| 欧美国产日韩一区| 一区二区三区 在线观看视| 久久精品欧美视频| 亚洲国产成人精品久久久国产成人一区| 精品久久久久久电影| 97视频在线观看视频免费视频| 欧美巨大黑人极品精男| 清纯唯美日韩制服另类| 成人在线小视频| 少妇久久久久久| 91精品视频专区| 日本成人黄色片| 久久这里有精品| 亚洲成人精品久久久| 日韩中文字幕国产精品| 91在线观看免费观看| 国产一区二区三区18| 亚洲欧美一区二区三区久久| 亚洲国产精品网站| 精品国产美女在线| 日韩亚洲欧美成人| yw.139尤物在线精品视频| 91久久嫩草影院一区二区| 久久91亚洲精品中文字幕| 国产热re99久久6国产精品| 精品久久久久久久中文字幕| 精品久久久久久久久久久久| 精品久久久久久久久久久久久久| 91久久久久久久| 国产精品国产亚洲伊人久久| 久久久国产成人精品| 欧美性猛交xxxx偷拍洗澡| 欧美在线国产精品| 欧洲亚洲女同hd| 日韩一中文字幕| 日韩精品有码在线观看| 亚洲剧情一区二区| 日韩视频在线观看免费| 日韩精品在线观看视频| 日本午夜精品理论片a级appf发布| 国产在线高清精品| 成人免费xxxxx在线观看| 亚洲人成绝费网站色www| 91日韩在线视频| 亚洲性视频网址| 成人h片在线播放免费网站| 欧美在线性视频| 国产精品极品美女粉嫩高清在线| 精品久久久久国产| 亚洲色图国产精品| 色综合色综合久久综合频道88| 久久手机免费视频| 久久99精品国产99久久6尤物| 成人午夜两性视频| 精品动漫一区二区三区| 欧美午夜精品久久久久久浪潮| 色综合久久88色综合天天看泰| 国产亚洲视频在线观看| 色综合男人天堂| 国产精品99久久99久久久二8| 亚洲美女www午夜| 欧美精品videos| 亚洲国产精品中文| 精品亚洲夜色av98在线观看| 2019最新中文字幕| 国产99久久精品一区二区| 国产丝袜一区视频在线观看| 国产精品一区二区久久精品| 美女视频黄免费的亚洲男人天堂| 亚洲最大福利视频网| 精品电影在线观看| 欧美小视频在线观看| 26uuu另类亚洲欧美日本老年| 欧美一级成年大片在线观看| 欧美精品免费在线观看| 欧美高清videos高潮hd| 欧美精品免费播放| 日本欧美中文字幕| 国产亚洲a∨片在线观看| 国产成人激情小视频| 精品亚洲精品福利线在观看| 在线国产精品播放| 在线看日韩欧美| 精品一区二区电影| 美女视频黄免费的亚洲男人天堂| 久久久日本电影| 亚洲国产中文字幕久久网| 性欧美在线看片a免费观看| 欧美中文在线字幕| 日韩欧美极品在线观看| 日韩av在线免费观看一区| 中日韩午夜理伦电影免费| 国产精品久久久久久久午夜| 欧美专区在线观看| 91黑丝高跟在线| 久久久久久久网站| 91在线中文字幕| 日韩一区二区av| 国产精品久久久久久av福利软件| 成人午夜两性视频| 亚洲aⅴ男人的天堂在线观看| 欧美一级在线播放| 麻豆国产va免费精品高清在线| 欧美性猛交xxxx久久久| 91最新国产视频| 亚洲精品xxx| 欧美香蕉大胸在线视频观看| 91网站在线免费观看| 国产一区二区三区高清在线观看| 亚洲国产精品一区二区久| 欧美极品少妇xxxxⅹ免费视频| 欧美日本中文字幕| 永久免费毛片在线播放不卡| 久久精品视频99| 亚洲国产成人久久综合一区| 久久精品国产综合| 亚洲图片欧洲图片av| 97视频国产在线| 成人在线视频福利| 久久久www成人免费精品张筱雨| 国产精品成人品| 日韩动漫免费观看电视剧高清| 狠狠色狠色综合曰曰| 欧美大片在线看| 69影院欧美专区视频| 午夜精品久久久久久久男人的天堂| 亚洲综合第一页| 正在播放亚洲1区| 在线日韩日本国产亚洲| 久久99国产综合精品女同| 亚洲午夜av久久乱码| 亚洲性夜色噜噜噜7777| 国产视频综合在线| 97av在线视频免费播放| 日韩精品欧美激情| 欧美激情视频网| 亚洲精品成人久久久| 伊人伊成久久人综合网小说| 日本欧美爱爱爱| 欧美日韩人人澡狠狠躁视频| 欧美国产日韩中文字幕在线| 欧美专区第一页| 欧美成人精品在线视频| 欧美激情喷水视频| 欧美孕妇毛茸茸xxxx| 欧美一级免费视频| 欧美日韩免费区域视频在线观看| 国产一区红桃视频| 欧美性视频网站| 精品成人久久av| 91亚洲精品久久久久久久久久久久| 亚洲欧美精品伊人久久| 91av在线免费观看| 国产亚洲视频中文字幕视频| 欧美性xxxx极品hd满灌| 国产aaa精品| 亚洲男人天堂视频| 欧美美女15p| 亚洲在线免费视频| 日韩高清电影免费观看完整| 亚洲剧情一区二区| 国产精品中文字幕久久久|