浅谈编译原理课程设计_C--编译器_语法分析代码生成收藏.docVIP

浅谈编译原理课程设计_C--编译器_语法分析代码生成收藏.doc

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

aa15090828118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档