資源簡介
快要過去的一個學期里,學了編譯原理,課程大作業寫簡易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取模軟件完美版
評論
共有 條評論