-
大小: 2.09MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-09-13
- 語言: 其他
- 標(biāo)簽: 編譯原理??實(shí)驗(yàn)??
資源簡介
TINY+語言的語法分析軟件提供Window界面,用戶可以點(diǎn)擊【打開】按鈕打開或者在編輯框中輸入一個(gè)擴(kuò)展Tiny+語言源程序;通過【打印語法樹】復(fù)選按鈕可以選擇在分析結(jié)果中打印語法樹,【語法分析】按鈕提供Tiny語言詞法分析功能,對(duì)源程序進(jìn)行語法分析后在內(nèi)存中生成語法樹,并將分析結(jié)果顯示在編輯框中;【文件另存為】按鈕可以保存文件。

代碼片段和文件信息
//?Parse.cpp:?implementation?of?the?Parse?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“Tiny.h“
#include?“Parse.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
Parse::Parse()
{
indentno=0;
m_Error?=?FALSE;
}
Parse::~Parse()
{
}
void?Parse::syntaxError(char?*?message)
{?
fprintf(sc.listing“\n>>>?“);
fprintf(sc.listing“Syntax?error?at?line?%d:?%s“sc.linenomessage);
m_Error?=?TRUE;
}
void?Parse::match(MyTokenType?expected)
{?
if?(token?==?expected)?token?=?sc.getToken();
else?{
syntaxError(“unexpected?token?->?“);
sc.printToken(token);
fprintf(sc.listing“??????“);
}
}
char?*?Parse::copyString(char?*?str)
{
int?n;
char?*?t;
if?(str==NULL)?return?NULL;
n?=?strlen(str)+1;
t?=(char?*)?malloc(n);
if?(t==NULL)
fprintf(sc.listing“Out?of?memory?error?at?line?%d\n“sc.lineno);
else?strcpy(tstr);
return?t;
}
void?Parse::printSpaces(void)
{
int?i;
for?(i=0;i fprintf(sc.listing“?“);
}
void?Parse::printTree(?TreeNode?*?tree?)
{
int?i;
indentno+=2;
while?(tree?!=?NULL)?{
printSpaces();
if?(tree->nodekind==StmtK)
{
switch?(tree->kind.stmt)?
{
case?IfK:
fprintf(sc.listing“If\n“);
break;
case?RepeatK:
fprintf(sc.listing“Repeat\n“);
break;
case?AssignK:
fprintf(sc.listing“Assign?to:?%s\n“tree->attr.name);
break;
case?ReadK:
fprintf(sc.listing“Read:?%s\n“tree->attr.name);
break;
case?WriteK:
fprintf(sc.listing“Write\n“);
break;
case?WhileK:
fprintf(sc.listing“While\n“);
break;
case?DowhileK:
fprintf(sc.listing“Do\n“);
break;
case?ForIncK:
fprintf(sc.listing“For(遞增)\n“);
break;
case?ForDecK:
fprintf(sc.listing“For(遞減)\n“);
break;
default:
fprintf(sc.listing“Unknown?ExpNode?kind\n“);
break;
}
}
else?if?(tree->nodekind==ExpK)
{?
switch?(tree->kind.exp)?
{
case?OpK:
fprintf(sc.listing“Op:?“);
sc.printToken(tree->attr.op);
break;
case?ConstK:
fprintf(sc.listing“Const:?%d\n“tree->attr.val);
break;
case?IdK:
fprintf(sc.listing“Id:?%s\n“tree->attr.name);
break;
default:
fprintf(sc.listing“Unknown?ExpNode?kind\n“);
break;
}
}
else?fprintf(sc.listing“Unknown?node?kind\n“);
for?(i=0;i printTree(tree->child[i]);
tree?=?tree->sibling;
}
indentno-=2;
}
TreeNode?*?Parse::newStmtNode(StmtKind?kind)
{
TreeNode?*?t?=?(TreeNode?*)?malloc(sizeof(TreeNode));
int?i;
if?(t==NULL)
fprintf(sc.listing“Out?of?memory?error?at?line?%d\n“sc.lineno);
else?
{
for?(i=0;i
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????30575??2011-05-24?23:52??編譯原理_Tiny+語法分析\Tiny\Debug\Parse.obj
?????文件??????19077??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Debug\Scan.obj
?????文件?????105421??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\Debug\StdAfx.obj
?????文件?????118831??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Debug\Tiny.exe
?????文件?????269768??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Debug\Tiny.ilk
?????文件??????16347??2011-05-25?00:26??編譯原理_Tiny+語法分析\Tiny\Debug\Tiny.obj
?????文件????5507044??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\Debug\Tiny.pch
?????文件?????435200??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Debug\Tiny.pdb
?????文件???????2568??2011-05-25?00:02??編譯原理_Tiny+語法分析\Tiny\Debug\Tiny.res
?????文件??????40543??2011-05-25?23:45??編譯原理_Tiny+語法分析\Tiny\Debug\TinyDlg.obj
?????文件?????222208??2011-05-26?05:28??編譯原理_Tiny+語法分析\Tiny\Debug\vc60.idb
?????文件?????372736??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Debug\vc60.pdb
?????文件???????8191??2011-05-24?23:52??編譯原理_Tiny+語法分析\Tiny\Parse.cpp
?????文件???????1294??2011-05-24?23:40??編譯原理_Tiny+語法分析\Tiny\Parse.h
?????文件???????3543??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\ReadMe.txt
?????文件???????1078??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\res\Tiny.ico
?????文件????????396??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\res\Tiny.rc2
?????文件????????774??2011-05-24?23:33??編譯原理_Tiny+語法分析\Tiny\resource.h
?????文件???????5017??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Scan.cpp
?????文件???????2250??2011-05-24?22:17??編譯原理_Tiny+語法分析\Tiny\Scan.h
?????文件????????239??2011-05-26?05:29??編譯原理_Tiny+語法分析\Tiny\source.tny
?????文件????????206??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\StdAfx.cpp
?????文件???????1054??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\StdAfx.h
?????文件??????????0??2011-05-24?22:07??編譯原理_Tiny+語法分析\Tiny\syntax_tree.txt
?????文件????????239??2010-11-29?16:08??編譯原理_Tiny+語法分析\Tiny\test.txt
?????文件??????35472??2011-05-25?00:02??編譯原理_Tiny+語法分析\Tiny\Tiny.aps
?????文件???????1172??2011-05-26?05:27??編譯原理_Tiny+語法分析\Tiny\Tiny.clw
?????文件???????2035??2011-05-24?21:56??編譯原理_Tiny+語法分析\Tiny\Tiny.cpp
?????文件???????4365??2011-05-24?23:56??編譯原理_Tiny+語法分析\Tiny\Tiny.dsp
?????文件????????516??2011-05-24?23:56??編譯原理_Tiny+語法分析\Tiny\Tiny.dsw
............此處省略17個(gè)文件信息
評(píng)論
共有 條評(píng)論