编译原理实验三 语义分析.doc

编译原理实验三 语义分析.doc

ID:57604584

大小:36.01 KB

页数:8页

时间:2020-08-28

编译原理实验三   语义分析.doc_第1页
编译原理实验三   语义分析.doc_第2页
编译原理实验三   语义分析.doc_第3页
编译原理实验三   语义分析.doc_第4页
编译原理实验三   语义分析.doc_第5页
资源描述:

《编译原理实验三 语义分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理实验三语法分析并进行语义分析输入:经过词法分析后形成的token[]和tokenstring[]输出:检查有无语法错误,形成语法树,并检查是否符合语义。样例程序已经能对变量声明填符号表、进行类型检查。文法:stmt_seq-->statement;stmt_seq

2、statementstatement-->decl_stmt

3、assign_stmtdecl_stmt-->typevar_listtype-->int

4、floatvar_list-->id,var_list

5、idassign_s

6、tmt-->id:=expexp-->exp+term

7、exp-term

8、termterm-->term*factor

9、term*factor

10、factorfactor-->id

11、num

12、(exp)要求掌握理解程序设计方法。样例程序#include#includetypedefenum{MINUS,PLUS,TIMES,OVER,LPAREN,RPAREN,SEMI,ASSIGN,NUM,ID,INT,FLOAT,COMMA,DOLLAR}tokentype;/*

13、记号*/typedefenum{stmtk,expk}nodekind;typedefenum{ifk,assignk,declk}stmtkind;typedefenum{opk,constk,idk}expkind;typedefenum{integer,real}exptype;typedefstructtreenode{structtreenode*child[3];structtreenode*sibling;nodekindnodek;exptypedtype;union{stmtkin

14、dstmt;expkindexp;}kind;union{tokentypeop;intval;char*name;}attr;}treenode;typedefstructbucket{char*name;exptypedtype;structbucket*next;}bucket;bucket*hashtable[211];/*tokentypetoken[6]={ID,ASSIGN,NUM,PLUS,NUM,INT,FLOAT,COMMA,DOLLAR};chartokenstring[6][

15、30]={"ab",":=","12","+","5","$"};*/tokentypetoken[]={INT,ID,COMMA,ID,SEMI,ID,ASSIGN,NUM,PLUS,NUM,TIMES,NUM,SEMI,ID,ASSIGN,NUM,DOLLAR};chartokenstring[][30]={"int","ab",",","xy",";","ab",":=","12","+","5","*","3",";","xy",":=","34","$"};intwordindex=0;/

16、*以上两个数组的索引*/treenode*decl();treenode*factor();treenode*term();treenode*exp();treenode*assign_stmt();treenode*stmt_seq();pretraverse(treenode*);inthash(char*);voidst_insert(char*,exptype);intst_lookup(char*);voidbuildsymtab(treenode*);voidsetnodetype(tr

17、eenode*);main(){treenode*t;t=stmt_seq();/*语法分析建语法树*/buildsymtab(t);/*建符号表*/pretraverse(t);/*遍历语法树*/setnodetype(t);/*类型检查设置*/}treenode*stmt_seq(){treenode*t;treenode*p;if((token[wordindex]==INT)

18、

19、(token[wordindex]==FLOAT)){t=decl();}if(token[wordindex]=

20、=ID)t=assign_stmt();p=t;while((token[wordindex]==SEMI)&&(token[wordindex]!=DOLLAR)){treenode*q;wordindex++;q=assign_stmt();p->sibling=q;p=q;}returnt;}treenode*assign_stmt(){treenode*t=(treenode*)malloc(sizeof(treenode));if(token[wordind

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

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

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