• 大小: 2.09MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-13
  • 语言: 其他
  • 标签: 编译原理  实验  

资源简介

TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。

资源截图

代码片段和文件信息

// 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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      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个文件信息

评论

共有 条评论