简单c语言编译器(编译原理)

简单c语言编译器(编译原理)

ID:19680321

大小:95.00 KB

页数:26页

时间:2018-10-05

简单c语言编译器(编译原理)_第1页
简单c语言编译器(编译原理)_第2页
简单c语言编译器(编译原理)_第3页
简单c语言编译器(编译原理)_第4页
简单c语言编译器(编译原理)_第5页
资源描述:

《简单c语言编译器(编译原理)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、专业资料#include#include#include#include#include#include#include#include#defineNULL0structStack//栈结构体:序号、内容、连接下一结点指针{intnum;charname;structStack*next;};structGuiyue//规则集结构体:序号、规则长

2、度、符号、连接下一结点指针{intnum;intcount;charname;structGuiyue*next;};structRelation//分析表结构体:状态序号、对应符号列、操作类型的对应序号、操作类型、连接下一结点指针{intline_States;charrank_Letter;intrelationship;charname;structRelation*next;};structSign//符号表结构体:自变量名、标识类型、连接下一结点指针{charname[20];charkind;s

3、tructSign*next;};structWord//单词表结构体:单词名字、标识类型、状态、序号、行号、连接符号表指针、连接下一结点指针{charname[20];学习资料专业资料charmark_name;intstate;intnum;intline;structSign*link;structWord*next;};FILE*fp1;//文件指针introw=1,line[10000],Lin[300],w_num;//字符行变量、字符行、单词所在行、字符数charbuffer[10000];/

4、/字符串缓冲区Stack*MarkPush(Stack*ip,charmark,intI_i)//压栈{Stack*s;s=(Stack*)malloc(sizeof(Stack));s->name=mark;s->num=I_i;s->next=ip;ip=s;returnip;}voidMarkPop(Stack*ip)//出栈{Stack*q;charname;name=ip->name;q=ip->next;if(ip->next!=NULL){ip->name=ip->next->name;ip-

5、>num=ip->next->num;ip->next=ip->next->next;free(q);}}intjudge(charch)//接收ch判断字符,变量flag返回字符类别{intflag;if(ch=='!'

6、

7、ch=='$'

8、

9、ch=='&'

10、

11、ch=='*'

12、

13、ch=='('

14、

15、ch==')'

16、

17、ch=='-'

18、

19、ch=='_'

20、

21、ch=='+'

22、

23、ch=='='

24、

25、ch=='

26、'

27、

28、ch=='{'

29、

30、ch=='}'

31、

32、ch=='['

33、

34、ch==']'

35、

36、ch==';'

37、

38、ch==':'

39、

40、

41、ch=='"'

42、

43、ch=='<'

44、

45、ch==','

46、

47、ch=='>'

48、

49、ch=='.'

50、

51、ch=='/'

52、

53、ch==''')flag=1;elseif('0'<=ch&&ch<='9')学习资料专业资料flag=2;elseif(('a'<=ch&&ch<='z')

54、

55、('A'<=ch&&ch<='Z'))flag=3;elseif(ch=='')flag=4;elseif(ch=='')flag=5;elseif(ch=='?')flag=6;elseif(feof(fp1))flag=7;//结

56、束elseflag=0;//illegalcharacterreturn(flag);}//======================================================================================================//词法分析函数:voidscan()//数据传递:形参fp接收指向文本文件头的文件指针;//全局变量buffer与line对应保存源文件字符及其行号,char_num保存字符总数。voidscan(){charch

57、;intflag,j=0,i=-1;while(!feof(fp1)){ch=fgetc(fp1);flag=judge(ch);printf("%c",ch);//显示打开的文件if(flag==1

58、

59、flag==2

60、

61、flag==3){i++;buffer[i]=ch;line[i]=row;}elseif(flag==4){i++;buffer[i]='?';line[i]=row;}elseif(flag

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。