• 大小: 1.08MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-20
  • 语言: 其他
  • 标签: C编译器  

资源简介

快要过去的一个学期里,学了编译原理,课程大作业写简易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个文件信息

评论

共有 条评论