资源简介
快要过去的一个学期里,学了编译原理,课程大作业写简易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取模软件完美版
相关资源
- 学生管理信息系统详细设计说明书
- uml项目 学生选课系统
- 学生学籍管理系统——毕业设计论文
- 大学生实验室用辅助电源+-5V +-12V
- 桌面日历提醒你的生活
- 数据结构学生选课课程设计
- 高级软件工程 研究生课程
- 基于FPGA的DDS信号发生器设计
- Struts2文件动态上传和动态(可自动生
- 代码自动生成
- 自动生成.rar
- ecopath with ecosim软件教程
- 学生考试管理系统
- 学生成绩管理系统报告 软件工程文档
- 学生MIS信息管理系统源码
- 基于数字图片处理的数控G代码生成源
- 基于单片机8253芯片的可调频方波发生
- 姓名缩写+生日组合1.5G 无线 密码
- 数据结构课程设计——统计学生成绩
- 基于GIS的林业用地生态适宜性评价-数
- 51控制的AD9850信号发生制作与调试-8
- 2019MCM_D_论文M奖
- 2018全国大学生智能车竞赛比赛细则
- 软件工程课程设计-学生成绩管理系统
- 城市生长插件的使用方法附插件
- 正弦波信号发生器verilog代码
- QRCode_QR码生成代码库(带范例)源码
- 虹膜识别VC2008+opencv2.3.1源码,改编自
- QT版学生成绩管理系统源码,未使用数
- 学生信息管理系统 程序加论文
评论
共有 条评论