编译原理---简易C编译器 生成汇编语言代码
快要过去的一个学期里,学了编译原理,课程大作业写简易C编译器。能实现加减乘除四则运算,取模赋值运算,逻辑表达式运算,复合语句,if,while,for语句~支持输入输出,最终生成汇编语言代码。移位运算没写。
调试过了,如有好建议请大家赐教。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 540 2008-12-14 19:10 ToAsm_第五次作业ToAsm_第五次作业.dsw
文件 58368 2008-12-15 08:21 ToAsm_第五次作业ToAsm_第五次作业.ncb
文件 115712 2008-12-15 08:20 ToAsm_第五次作业Debugvc60.idb
文件 143360 2008-12-15 08:20 ToAsm_第五次作业Debugvc60.pdb
文件 725089 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.exe
文件 1295360 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.pdb
文件 54368 2008-12-15 08:20 ToAsm_第五次作业Debugmylexer.obj
文件 2030468 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.pch
文件 482941 2008-12-15 08:20 ToAsm_第五次作业Debugmyparser.obj
文件 910572 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.ilk
文件 14859 2008-12-15 08:20 ToAsm_第五次作业mylexer.v
文件 24905 2008-12-15 08:20 ToAsm_第五次作业myparser.v
文件 751 2008-12-14 19:06 ToAsm_第五次作业ToAsm.pgp
文件 2941 2008-12-15 08:20 ToAsm_第五次作业output.asm
文件 433 2008-12-15 08:07 ToAsm_第五次作业yyinn.txt
文件 266 2008-12-15 08:20 ToAsm_第五次作业ToAsm_第五次作业.plg
文件 1787 2008-12-15 08:20 ToAsm_第五次作业mylexer.h
文件 20652 2008-12-15 08:20 ToAsm_第五次作业mylexer.cpp
文件 2915 2008-12-15 08:20 ToAsm_第五次作业myparser.h
文件 101121 2008-12-15 08:20 ToAsm_第五次作业myparser.cpp
文件 201 2008-12-15 08:20 ToAsm_第五次作业output.txt
文件 48640 2008-12-15 08:21 ToAsm_第五次作业ToAsm_第五次作业.opt
文件 4663 2008-12-15 08:21 ToAsm_第五次作业ToAsm_第五次作业.dsp
文件 574 2008-12-15 08:21 ToAsm_第五次作业ToAsm.pgw
文件 71977 2008-12-15 14:04 ToAsm_第五次作业myparser.y
文件 8690 2008-12-15 14:05 ToAsm_第五次作业mylexer.l
目录 0 2008-12-14 19:10 ToAsm_第五次作业Debug
目录 0 2008-12-14 19:10 ToAsm_第五次作业
----------- --------- ---------- ----- ----
6122153 28
............此处省略1个文件信息
/****************************************************************************
* U N R E G I S T E R E D C O P Y
*
* You are on day 84 of your 30 day trial period.
*
* This file was produced by an UNREGISTERED COPY of Parser Generator. It is
* for evaluation purposes only. If you continue to use Parser Generator 30
* days after installation then you are required to purchase a license. For
* more information see the online help or go to the Bumble-Bee Software
* homepage at:
*
* http://www.bumblebeesoftware.com
*
* This notice must remain present in the file. It cannot be removed.
****************************************************************************/
/****************************************************************************
* mylexer.cpp
* C++ source file generated from mylexer.l.
*
* Date: 12/15/08
* Time: 08:20:04
*
* ALex Version: 2.06
****************************************************************************/
#include
// namespaces
#ifdef YYSTDCPPLIB
using namespace std;
#endif
#ifdef YYNAMESPACE
using namespace yl;
#endif
#line 1 “.\mylexer.l“
/****************************************************************************
mylexer.l
ParserWizard generated Lex file.
Date: 2008年12月14日
****************************************************************************/
#include “myparser.h“
#define MAXCHILDREN 4 //每一个树结点所拥有的孩子结点的最大个数
#define IDNUMMAX 100 //可存储变量的最大数目
#define LETNUMMAX 999 //存储变量名字的区域大小
//定义符号表元素的数据结构
struct entry
{
char *lexptr; //该指针指向符号名字的存储位置
int type; //该变量保存该符号的类型(char型bool型int型或float型)(1:char2:bool3:int4:float)
float token; //改变量保存该符号的值(都为float型,依靠type来做区分)
};
extern entry symtable[IDNUMMAX];//定义符号表
extern char lexemes[LETNUMMAX];//定义变量名字的实际存储区域
extern int lastentry; //symtable中最后引用的位置
int lastchar = -1; //lexemes中最后引用的位置
//定义结点种类枚举类型
typedef enum nodeKind
{
kind_prog //prog
kind_lines //lines
kind_expr //expr
kind_stmt //stmt
kind_rela_stmt //rela_stmt
kind_type //type
kind_const //const
kind_ID //ID(标示浮)
kind_const_value //常量(单字符常量:COUNTCHAR布尔型常量:truefalse整型常量:COUNTINTNUM浮点常量:COUNTFLOATNUM)
} NodeKind ;
//定义树结点结构
typedef struct treeNode
{
treeNode * child[MAXCHILDREN]; //指向其孩子结点的指针
treeNode * sibling; //保存指向其右兄弟结点的指针
int Currnode_number; //保存该结点的编号
int lineno; //保存某些结点对应用户程序的行号
NodeKind nodekind; //结点类型取值范围为NodeKind中的值
int nodekind_kind; //保存一个NodeKind类中所属子类的类型,即编号(当nodekind取kind_type具体值时
//当保存的nodekind_kind为1时,表示对应的结点为char型nodekind_kind为2时表示对应的节点为bool型.....)
int stmt_type; //当nodekind为kind_stmt时表达式取值,该变量的值有效.保存stmt表达式的类型
//(stmt_type为1时,表示对应的stmt表达式为char型;为2时,表示其为bool型;为3时,其为int型;为4时,表示其为float型)
float node_value; //当结点为叶结点且其为kind_node_value时用来保存常量的值.
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 540 2008-12-14 19:10 ToAsm_第五次作业ToAsm_第五次作业.dsw
文件 58368 2008-12-15 08:21 ToAsm_第五次作业ToAsm_第五次作业.ncb
文件 115712 2008-12-15 08:20 ToAsm_第五次作业Debugvc60.idb
文件 143360 2008-12-15 08:20 ToAsm_第五次作业Debugvc60.pdb
文件 725089 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.exe
文件 1295360 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.pdb
文件 54368 2008-12-15 08:20 ToAsm_第五次作业Debugmylexer.obj
文件 2030468 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.pch
文件 482941 2008-12-15 08:20 ToAsm_第五次作业Debugmyparser.obj
文件 910572 2008-12-15 08:20 ToAsm_第五次作业DebugToAsm_第五次作业.ilk
文件 14859 2008-12-15 08:20 ToAsm_第五次作业mylexer.v
文件 24905 2008-12-15 08:20 ToAsm_第五次作业myparser.v
文件 751 2008-12-14 19:06 ToAsm_第五次作业ToAsm.pgp
文件 2941 2008-12-15 08:20 ToAsm_第五次作业output.asm
文件 433 2008-12-15 08:07 ToAsm_第五次作业yyinn.txt
文件 266 2008-12-15 08:20 ToAsm_第五次作业ToAsm_第五次作业.plg
文件 1787 2008-12-15 08:20 ToAsm_第五次作业mylexer.h
文件 20652 2008-12-15 08:20 ToAsm_第五次作业mylexer.cpp
文件 2915 2008-12-15 08:20 ToAsm_第五次作业myparser.h
文件 101121 2008-12-15 08:20 ToAsm_第五次作业myparser.cpp
文件 201 2008-12-15 08:20 ToAsm_第五次作业output.txt
文件 48640 2008-12-15 08:21 ToAsm_第五次作业ToAsm_第五次作业.opt
文件 4663 2008-12-15 08:21 ToAsm_第五次作业ToAsm_第五次作业.dsp
文件 574 2008-12-15 08:21 ToAsm_第五次作业ToAsm.pgw
文件 71977 2008-12-15 14:04 ToAsm_第五次作业myparser.y
文件 8690 2008-12-15 14:05 ToAsm_第五次作业mylexer.l
目录 0 2008-12-14 19:10 ToAsm_第五次作业Debug
目录 0 2008-12-14 19:10 ToAsm_第五次作业
----------- --------- ---------- ----- ----
6122153 28
............此处省略1个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)