日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

词法分析程序

發(fā)布時(shí)間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 词法分析程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.詞法分析程序的功能:

輸入:所給文法的源程序字符串。

輸出:二元組構(gòu)成的序列。

其中:syn為單詞種別碼。

token為存放的單詞自身字符串。


2.符號(hào)與種別碼的對(duì)照表

3.詞法規(guī)則

<字母> A a|b|c|……y|z
<數(shù)字>
A→1|2|3|4|5|6|7|8|9
S→A|SA|SA0
<整數(shù)常數(shù)>
A→1|2|3|4|5|6|7|8|9
S→A|SA|SA0
<標(biāo)識(shí)符>
A→a|b|c|……y|z
B→0|1|2|3|4|5|6|7|8|9
S→A|SB
<關(guān)鍵字>
S→if|else|while|do|for|int|char|……
<運(yùn)算符>
S→+|-|x|/|=|#|<|>|<=|>=|:=
<界符>
S→(|)|,|;|.

4.源代碼與調(diào)試程序截圖

#include <stdio.h> #include <string.h> char prog[80],token[8],ch; int syn,p,m,n,sum; char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner(void); main() { p=0; printf("\n please input a string(end with '#'):\n"); do{ scanf("%c",&ch); prog[p++]=ch; }while(ch!='#'); p=0; do{ scaner(); switch(syn) { case 11: printf("( %-10d%5d )\n",sum,syn); break; case -1: printf("you have input a wrong string\n"); //getch(); return 0; break; default: printf("( %-10s%5d )\n",token,syn); break; } }while(syn!=0); return 0;//getch(); } void scaner() { sum=0; for(m=0;m<8;m++) token[m]=0; ch=prog[p++]; m=0; while((ch==' ')||(ch=='\n')) ch=prog[p++]; if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))//可能是標(biāo)示符或者變量名 { while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) //找到一個(gè)變量名或者關(guān)鍵字,直到遇到空格為止 { token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++) //將識(shí)別出來的字符和已定義的標(biāo)示符作比較if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch>='0')&&(ch<='9')) //數(shù)字 { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; //將字符串轉(zhuǎn)換成數(shù)字 ch=prog[p++]; } p--; syn=11; } else { switch(ch) //其它字符 { case '<': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=22; token[m++]=ch; } else { syn=20; p--; } break; case '>': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=23; p--; } break; case '+': token[m++]=ch; ch=prog[p++]; if(ch=='+') { syn=17; token[m++]=ch; } else { syn=13; p--; } break; case '-': token[m++]=ch; ch=prog[p++]; if(ch=='-') { syn=29; token[m++]=ch; } else { syn=14; p--; } break; case '!': ch=prog[p++]; if(ch=='=') { syn=21; token[m++]=ch; } else { syn=31; p--; } break; case '=': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=25; token[m++]=ch; } else { syn=18; p--; } break; case '*': syn=15; token[m++]=ch; break; case '/': syn=16; token[m++]=ch; break; case '(': syn=27; token[m++]=ch; break; case ')': syn=28; token[m++]=ch; break; case '{': syn=5; token[m++]=ch; break; case '}': syn=6; token[m++]=ch; break; case ';': syn=26; token[m++]=ch; break; case '\"': syn=30; token[m++]=ch; break; case '#': syn=0; token[m++]=ch; break; case ':': syn=17; token[m++]=ch; break; default: syn=-1; break; } } token[m++]='\0'; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/chenguangpeng/p/5925044.html

總結(jié)

以上是生活随笔為你收集整理的词法分析程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。