资源简介
快要过去的一个学期里,学了编译原理,课程大作业写简易C编译器。能实现加减乘除四则运算,取模赋值运算,逻辑表达式运算,复合语句,if,while,for语句~支持输入输出,最终生成汇编语言代码。移位运算没写。
调试过了,如有好建议请大家赐教。

代码片段和文件信息
/****************************************************************************
* 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_第五次作业\Debug\vc60.idb
文件 143360 2008-12-15 08:20 ToAsm_第五次作业\Debug\vc60.pdb
文件 725089 2008-12-15 08:20 ToAsm_第五次作业\Debug\ToAsm_第五次作业.exe
文件 1295360 2008-12-15 08:20 ToAsm_第五次作业\Debug\ToAsm_第五次作业.pdb
文件 54368 2008-12-15 08:20 ToAsm_第五次作业\Debug\mylexer.obj
文件 2030468 2008-12-15 08:20 ToAsm_第五次作业\Debug\ToAsm_第五次作业.pch
文件 482941 2008-12-15 08:20 ToAsm_第五次作业\Debug\myparser.obj
文件 910572 2008-12-15 08:20 ToAsm_第五次作业\Debug\ToAsm_第五次作业.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个文件信息
- 上一篇:王道2013年最后8套模拟题答案前四套
- 下一篇:12864取模软件完美版
相关资源
- 2018全国大学生计算机博弈大赛 棋谱
- 一个labview仿真的函数信号发生器.vi
- 基于ACCESS的生产管理信息系统.mdb
- 右键属性文件校验插件可同时生成十
- CCS中如何生成LIB文件-并在另外CCS项目
- 根据硬件ID和程序ID生成注册码
- railroad铁路CAD生成
- DAC0832波形发生器幅值及频率都精确可
- Xpath生成器,自动生成可用的Xpath。
- 数字频率合成dds正弦波基于FPGA的DDS产
- 用汇编实现的学生成绩档案管理系统
- 学生信息管理系统源码
- Google Earth KML文件生成工具
- 挑战杯全国大学生课外学术科技作品
- 数据库实现学生成绩管理系统选课管
- 利用foxmail模板批量生成邮件
- ReportMachine 交叉报表 学生成绩表
- 一则可以随机产生四则运算的c程序!
- 武汉大学本科生论文格式自动排版工
- 网页设计作业,旅游网,适合大学生
- 计算机软件工程研究生专业毕业设计
- 2007年全国大学生电子设计竞赛一等奖
- linux下用多进程同步方法解决生产者
- 多线程生产者消费者模式
- 学生管理系统的添加、修改、删除、
- 简单函数发生器,能产生常见的三种
- windows下生成MD5值的工具(WinMD5)
- atmega16硬件产生方波的程序
- 学生成绩管理系统 C 语言源代码
- ssh框架实现的学生管理系统
评论
共有 条评论