編譯原理實驗詞法分析器_第1頁
編譯原理實驗詞法分析器_第2頁
編譯原理實驗詞法分析器_第3頁
編譯原理實驗詞法分析器_第4頁
編譯原理實驗詞法分析器_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、#include "stdio.h"#include "string.h"#include "stdlib.h"char key89="if","int","for","while","do","return","break","continue" /保留字char operater103="+","-","*",&q

2、uot;/","=",">","<",">+","<+","!=" /運算符char delimiter62=",","","","","(",")" /分隔符char real102="1","2","3","4","5",

3、"6","7","8","9","."int main()int i=0;void part();char name10,source100;printf("請輸入文件名:n");scanf("%s",&name);FILE *fp; /文件操作if(fp=fopen(name,"r")=NULL) /打開文件printf("File open error!n");exit(0);while(!feof(fp

4、)sourcei=fgetc(fp);i+;sourcei-1='0'printf("分離結果為:n");part();return 0;void part()int i=0;int j,k,flag,flag1; /flag為是否已判斷的標志 flag1為常量的標志char source100;char midest50; /中間數(shù)組,臨時存放分離的單詞while(sourcei!='0') /逐個讀入字符組成單獨的單詞j=0;flag=0;flag1=0;domidestj=sourcei;i+;j+; /當不是分隔符和運算符和其他定義的

5、符號時 繼續(xù)循環(huán)while(sourcei!=' '&&sourcei!='+'&&sourcei!='-'&&sourcei!='*'&&sourcei!='/'&&sourcei!='='&&sourcei!='>'&&sourcei!='<'&&sourcei!='>+'&&source

6、i!='<+'&&sourcei!='!='&&sourcei!=','&&sourcei!=''&&sourcei!=''&&sourcei!=''&&sourcei!='('&&sourcei!=')');midestj='0' /退出循環(huán)時把最后一個存儲單元定義為0作為字符串的結束符 /判斷midest數(shù)組中的內容 /判斷是否為保

7、留字for(k=0;k<8;k+)if(strcmp(midest,keyk)=0)printf("(%s,1)n",midest); /輸出保留字flag=1;break; if(flag=0) /判斷是否為常量for(k=0;midestk!='0'k+)if(midestk<48 | midestk>57 )flag1=1;break;if(flag1=0)printf("(%s,3)n",midest);/輸出常量flag=1;if(flag=0) /判斷是否輸入錯誤,如果無錯誤,則是標識符if(midest0&

8、gt;=48 && midest0<=57)printf("%s輸入錯誤!n",midest);elsefor(k=1;midestk!='0'k+)if(midestk>='a' && midestk<='z')|(midestk>='A' && midestk<='Z')|(midestk>='1' && midestk<='9')|(midestk=&#

9、39;_')|(midestk='#')|(midestk='.')flag=0;elseflag=1;break;if(flag=0)printf("(%s,2)n",midest);elseprintf("%s輸入錯誤!n",midest);if(sourcei=' ')i+;if(sourcei='+'|sourcei='-'|sourcei='*'|sourcei!='/'|sourcei='='|sourcei

10、='>'|sourcei='<'|sourcei='>+'|sourcei='<+'&&sourcei='!='|sourcei=','|sourcei=''|sourcei=''|sourcei=''|sourcei='('|sourcei=')')j=0;flag=0;midestj=sourcei;midestj+1='0'if(flag=0)for(k=0;k<10;k+)if(strcmp(midest,operaterk)=0) /看是不是運算符if(midestj='>'|midestj='<') /如果是運算符 再判斷是不是<號或>號 如果是 再查看后面有沒有=號 if(sourcei+1='=')midestj+1=sourcei+1; /如果有=號 就讓=跟在>或<號后面輸出midestj+2='0'i+;printf("(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論