资源简介
华南师范大学 本资源包括TINY扩充语言的语法分析的实验报告,编译原理附录B和TINY扩充语言的语法分析代码.实验报告中说明了该实验的完成步骤.
扩充的语法规则有:实现while、do while、for语句和求余计算式子,具体文法规则自行构造。
可参考:P97及P136的文法规则。
(1) While-stmt --> while exp do stmt-sequence endwhile
(2) Dowhile-stmt-->do stmt-sequence while exp
(3) for-stmt-->for identifier:=simple-exp to simple-exp do stmt-sequence enddo 步长递增1
(4) for-stmt-->for identifier:=simple-exp downto simple-exp do stmt-sequence enddo 步长递减1
要求:
(1)要提供一个源程序编辑界面,以让用户输入源程序(可保存、打开源程序)
(2)可由用户选择是否生成语法树,并可查看所生成的语法树。
(3)应该书写完善的软件文档
代码片段和文件信息
/****************************************************/
/* File: analyze.c */
/* Semantic analyzer implementation */
/* for the TINY compiler */
/* Compiler Construction: Principles and Practice */
/* Kenneth C. Louden */
/****************************************************/
#include “globals.h“
#include “symtab.h“
#include “analyze.h“
/* counter for variable memory locations */
static int location = 0;
/* Procedure traverse is a generic recursive
* syntax tree traversal routine:
* it applies preProc in preorder and postProc
* in postorder to tree pointed to by t
*/
static void traverse( TreeNode * t
void (* preProc) (TreeNode *)
void (* postProc) (TreeNode *) )
{ if (t != NULL)
{ preProc(t);
{ int i;
for (i=0; i < MAXCHILDREN; i++)
traverse(t->child[i]preProcpostProc);
}
postProc(t);
traverse(t->siblingpreProcpostProc);
}
}
/* nullProc is a do-nothing procedure to
* generate preorder-only or postorder-only
* traversals from traverse
*/
static void nullProc(TreeNode * t)
{ if (t==NULL) return;
else return;
}
/* Procedure insertNode inserts
* identifiers stored in t into
* the symbol table
*/
static void insertNode( TreeNode * t)
{ switch (t->nodekind)
{ case StmtK:
switch (t->kind.stmt)
{ case AssignK:
case ReadK:
if (st_lookup(t->attr.name) == -1)
/* not yet in table so treat as new definition */
st_insert(t->attr.namet->linenolocation++);
else
/* already in table so ignore location
add line number of use only */
st_insert(t->attr.namet->lineno0);
break;
default:
break;
}
break;
case ExpK:
switch (t->kind.exp)
{ case IdK:
if (st_lookup(t->attr.name) == -1)
/* not yet in table so treat as new definition */
st_insert(t->attr.namet->linenolocation++);
else
/* already in table so ignore location
add line number of use only */
st_insert(t->attr.namet->lineno0);
break;
default:
break;
}
break;
default:
break;
}
}
/* Function buildSymtab constructs the symbol
* table by preorder traversal of the syntax tree
*/
void buildSymtab(TreeNode * syntaxTree)
{ traverse(syntaxTreeinsertNodenullProc);
if (TraceAnalyze)
{ fprintf(listing“\nSymbol table:\n\n“);
printSymTab(listing);
}
}
static void typeError(TreeNode * t char * message)
{ fprintf(listing“Type error at line %d: %s\n“t->linenomessage);
Error = TRUE;
}
/* Procedure checkNode performs
* type checking at a single tree node
*/
static void checkNode(TreeNode * t)
{ switch (t->nodek
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 462848 2013-01-02 21:56 TINY 扩充语言的语法分析 - 副本.doc
文件 5161 1997-02-01 09:33 编译原理附录B\YACC\TINY.Y
文件 3338 1997-01-31 22:48 编译原理附录B\YACC\GLOBALS.H
目录 0 2013-01-02 19:48 编译原理附录B\YACC\
文件 1037 1998-08-01 14:01 编译原理附录B\UTIL.H
文件 4848 1998-08-01 14:02 编译原理附录B\UTIL.C
文件 14104 1998-03-20 13:40 编译原理附录B\TM.EXE
文件 16753 1998-08-01 14:02 编译原理附录B\TM.C
文件 40736 1998-04-26 21:47 编译原理附录B\TINY.EXE
文件 959 1998-08-01 14:01 编译原理附录B\SYMTAB.H
文件 3564 1998-08-01 14:02 编译原理附录B\SYMTAB.C
文件 659 1998-08-01 14:01 编译原理附录B\SCAN.H
文件 5733 1999-08-04 16:05 编译原理附录B\SCAN.C
文件 263 1996-08-25 15:33 编译原理附录B\SAMPLE.TNY
文件 920 1998-07-31 16:47 编译原理附录B\SAMPLE.TM
文件 1962 1998-07-31 15:15 编译原理附录B\README.DOS
文件 484 1998-08-01 14:01 编译原理附录B\PARSE.H
文件 5173 1998-08-01 14:02 编译原理附录B\PARSE.C
文件 1129 1998-02-03 22:29 编译原理附录B\MAKEFILE
文件 2535 1998-08-01 14:02 编译原理附录B\MAIN.C
文件 1995 1998-07-31 14:45 编译原理附录B\LEX\TINY.L
目录 0 2013-01-02 19:48 编译原理附录B\LEX\
文件 2955 1998-08-01 14:01 编译原理附录B\GLOBALS.H
文件 2234 1998-08-01 14:01 编译原理附录B\CODE.H
文件 3039 1998-08-01 14:02 编译原理附录B\CODE.C
文件 679 1998-08-01 14:01 编译原理附录B\CGEN.H
文件 6971 1998-08-01 14:02 编译原理附录B\CGEN.C
文件 652 1998-08-01 14:01 编译原理附录B\ANALYZE.H
文件 4452 1998-08-01 14:02 编译原理附录B\ANALYZE.C
目录 0 2013-01-02 19:48 编译原理附录B\
目录 0 2013-01-02 20:34 实验二\
............此处省略69个文件信息
相关资源
- 合工大编译原理17级课件全.zip
- 编译原理第二版 陈意云 张昱
- TinyOS仿真脚本、文件和开发环境
- 编译原理LL1分析程序
- 比特大战源代码
- 编译原理第2版—清华大学出版社
- 南京理工大学编译原理课后习题答案
- 编译原理实验decaf_PA2
- 小型编译器
- 编译原理词法分析语法分析
- 编译原理胡元义第三版课后答案
- 哈工大编译原理习题及答案
- LR0文法分析器32349
- 编译原理课程实验常州工学院,比较
- 编译原理教材清华大学版答案
- 编译原理_Tiny+语法分析
- 编译原理综合课程设计
- 编译原理课后习题答案 清华大学 第二
- 编译原理课件_本科版
- 川大编译原理PPT-2017
- 2层板设计Tiny6410 核心板原理图+底板原
- 编译原理课程设计
- 编译原理-Oberon-0逆向工程工具ROSE.ra
- 上海大学计算机编译原理PPT
- 编译原理期末考试题
- 编译原理四元式生成
- tiny4412嵌入式系统搭建完整教程
- Tiny6410流水灯——在已经启动的ARM L
- 布尔表达式的递归下降翻译程序设计
- 编译原理_第二版_李文生.pdf
评论
共有 条评论