- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程设计_C--编译器_语法分析代码生成 收藏
新一篇:?图像处理初级技巧(转)
编译原理课程设计_C--编译器_语法分析代码生成
%{ ?#include ?ctype.h?#include ?string.h?#include ?stdio.h?#include ?stdlib.h?#define HASHSIZE 256?#define GLOBAL 0?typedef int Type;?typedef struct symbol *Symbol;?typedef struct table *Table;?Table types;??Table currentTable;?int currentLevel;?int params;//堆栈已分配的单元个数;?int paramcount;//参数和临时变量总数记录?int realParam;//参数的个数记录?int calltype=0;//函数调用方式__stdcall__cdecl?char funBuffer[1024];//函数声明缓冲区?char localValBuffer[1024]; //局部变量缓冲区?char varBuffer[1024];//全局变量缓冲区?//char stringBuffer[1024];//字符串常量缓冲区?int msgIndex = 0;//字符串索引?int bufferLen;//缓冲区长度?int callparam;//调用时记录参数数目?int label=0;//自动生成标号
?struct symbol {??char *name;//串名??int scope;//层次??int sclass;//符号表内类型??Symbol up;//上一个被插入的符号的指针??int ty;//类型??float ref;//引用地址??int value;//符号表中符号的值??int calltype;//如果是函数,记录调用方式??int isLocal;//记录是全局变量还是局部变量?};?/*?void?1?int??2?char?3?void*?11?int*?12?char*?13?void[]?21?int[]?22?char[]?23?void*[]?31?int*[]?32?char*[]?33?*/
?struct entry {??struct symbol sym;??struct entry *link;?};
?struct table {??int level;??Table previous;??struct entry *buckets[HASHSIZE];??Symbol all;?};?Table table( Table tp, int level);?Symbol install(char *name, Table *tpp, int level, int sclass);?Symbol lookup(char *name, Table tp);?void enterscope();?void exitscope();
?Table table( Table tp, int level)?{??int i;??Table newTemp = (Table) malloc( sizeof( struct table ) );??newTemp-previous = tp;??newTemp-level = level;???for( i = 0; i HASHSIZE; i++ )??{???newTemp-buckets[i] = NULL;??}??if (tp)???newTemp-all = tp-all;??return newTemp;?}
?Symbol install(char *name, Table *tpp, int level, int sclass)?{??Table tp = *tpp;??struct entry *p;??int len;??unsigned h = name[0] (HASHSIZE - 1);??if (level 0 tp-level level)???tp = *tpp = table(tp, level);??currentTable = tp;??p = (struct entry *) malloc( sizeof( struct entry ) );??len = strlen( name );??p-sym.name = (char *
文档评论(0)