实验报告一:词法分析
實驗一、詞法分析實驗
專業(yè):商業(yè)軟件工程 ??姓名:覃偉業(yè) ?學號;201506110233
一、?實驗目的
編寫一個關于詞法分析的程序,
?
?
?
二、?實驗內容和要求
要求:
-輸入:源程序字符串
-輸出:二元組(種別,單詞符號本身)
?
三、?實驗方法、步驟及結果測試
?
可執(zhí)行程序名:詞法分析.exe
#include <stdio.h>
? 2 #include <string.h>
? 3
? 4 char wsym[100],token[8],ch;
? 5 int syn,word,i,j,sum;
? 6 char *keyword[6]={"begin","if","then","while","do","end"};
? 7
? 8 void scaner(void);
? 9
?10 main()
?11 {
?12???? word=0;
?13???? printf("\n 在下方輸入你的字符串(按回車結束輸入):\n");
?14
?15???? do{
?16???????????? scanf("%c",&ch);
?17???????????? wsym[word++]=ch;
?18???? }while(ch!='\n');
?19
?20???? word=0;
?21???? do{
?22???????????? scaner();
?23???????????? switch(syn)
?24???????????? {
?25???????????????? case 11:
?26???????????????????? printf("( %-10d%5d )\n",sum,syn);
?27???????????????? break;
?28
?29???????????????? case -1:
?30???????????????????? printf("you have input a wrong string\n");
?31???????????????????? return 0;
?32???????????????? break;
?33
?34???????????????? default:
?35???????????????? printf("( %-10s%5d )\n",token,syn);
?36???????????????? break;
?37???????????? }
?38???????? }while(syn!=0);
?39
?40? }
?41
?42 void scaner(void)
?43 {
?44???? sum=0;
?45
?46???? for(i=0;i<8;i++)
?47???????? token[i++]= NULL;
?48
?49???????? ch=wsym[word++];
?50???????? i=0;
?51
?52???? while((ch==' ')||(ch=='\n'))
?53???????? ch=wsym[word++];
?54
?55???? if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
?56????? {
?57???????? while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
?58???????? {
?59???????????? token[i++]=ch;
?60???????????? ch=wsym[word++];
?61???????? }
?62
?63???????? word--;
?64???????? syn=10;
?65
?66???????? for(j=0;j<6;j++)
?67???????? if(strcmp(token,keyword[n])==0)
?68???????? {
?69???????????? syn=j+1;
?70???????????? break;
?71???????? }
?72????? }
?73????? else if((ch>='0')&&(ch<='9'))
?74????? {
?75???????? while((ch>='0')&&(ch<='9'))
?76???????? {
?77???????????? sum=sum*10+ch-'0';
?78???????????? ch=wsym[word++];
?79???????? }
?80???????? word--;
?81???????? syn=11;
?82???? }
?83???? else
?84???? {
?85???????? switch(ch)
?86???????? {
?87?????? ??case '<':
?88???????????? token[i++]=ch;
?89???????????? ch=wsym[word++];
?90???????????? if(ch=='=')
?91???????????? {
?92???????????????? syn=21;
?93????????????? ???token[i++]=ch;
?94???????????? }
?95???????????? else
?96???????????? {
?97?????????? ??????syn=20;
?98???????????????? word--;
?99???????????? }
100???????? break;
101
102???????? case '>':
103???????????? token[i++]=ch;
104???????????? ch=wsym[word++];
105???????????? if(ch=='=')
106???????????? {
107???????????????? syn=24;
108???????????????? token[i++]=ch;
109???????????? }
110???????????? else
111???????????? {
112???????????????? syn=23;
113???????????????? word--;
114???????????? }
115???????? break;
116
117???????? case '+':
118???????????? syn=13;
119???????????? token[i++]=ch;
120???????? break;
121
122???????? case '-':
123???????????? syn=14;
124???????????? token[i++]=ch;
125???????? break;
126
127???????? case '=':
128???????????? syn=25;
129???????????? token[i++]=ch;
130???????? break;
131
132???????? case '*':
133???????????? syn=15;
134???????????? token[i++]=ch;
135???????? break;
136
137???????? case '/':
138???????????? syn=16;
139???????????? token[i++]=ch;
140???????? break;
141
142???????? case '(':
143???????????? syn=27;
144???????????? token[i++]=ch;
145???????? break;
146
147???????? case ')':
148???????????? syn=28;
149???????????? token[i++]=ch;
150???????? break;
151
152???????? case '<>':
153???????????? syn=22;
154???????????? token[i++]=ch;
155???????? break;
156
157???????? case ';':
158??????? ?????syn=26;
159???????????? token[i++]=ch;
160???????? break;
161
162???????? case '#':
163???????????? syn=0;
164???????????? token[i++]=ch;
165???????? break;
166
167???????? case ':':
168???????????? token[i++]=ch;
169???????????? ch=wsym[word++];
170???????????? if(ch=='=')
171???????????? {
172???????????????? syn=18;
173???????????????? token[i++]=ch;
174???????????? }
175???????????? else
176???????????? {
177???????????? syn=17;
178???????????? token[i++]=ch;
179???????????? }
180???????? break;
181
182???????? default:
183???????????? syn=-1;
184???????? break;
185???????? }
186???? }
187???????? token[i++]='\0';
188 }
66-188行
解釋:識別標識符,給標識符賦值(就是書本中的標識符所代表的數(shù)值),
?
?
?
?
簡單的識別標識符
?
?
?
四、?實驗總結
?
我覺得還是比較難理解的,還是不太會,更多的要去問舍友
?
轉載于:https://www.cnblogs.com/qq412158152/p/5962007.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的实验报告一:词法分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 160809230张钊
- 下一篇: first-child和first-of