资源简介
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个文件信息
- 上一篇:haze-tool补丁.zip
- 下一篇:非平稳信号的分析与处理
相关资源
- 基于stm32f103ve的程序——跑马灯实验
- 周立功开发板ProASIC3实验-syn_FIFO代码
- 编译原理实验工具及参考源码(lex&
- dotnet 写字板 实验 源代码 不好请要不
- 类pascal语言编译器(编译原理实验)
- 数学建模实验报告(八个全)
- 数值分析所有实验代码
- 数字逻辑与数字系统实验报告
- 多媒体综合设计报告(附作品)
- ubuntu9.10 可加载内核模块和字符设备驱
- 编译原理课程设计:词法语法编译器
- 操作系统 LRU算法 实验报告 及 程序代
- 分页系统模拟实验 操作系统 课程设
- 中科院 编译原理 习题及解答
- 数据结构实验魔王语言
- 编译原理四元式和逆波兰式
- 迈克尔逊干涉仪的调整与使用实验报
- 8259A中断控制实验
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- 广东工业大学汇编实验二用表格形式
- 数值计算实验源代码
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 数据结构实验 基于栈的表达式求值
- 利用启发式搜索解决八数码难题程序
- 武汉理工大学面向对象实验
- 计组实验(ALU的设计)
- 比较两个字符串大小汇编语言源代码
评论
共有 条评论