资源简介
这是一个单文档的tiny语言语法分析器,良好的MFC单文档界面。
代码片段和文件信息
/****************************************************/
/* File: main.c */
/* Main program for TINY compiler */
/* Compiler Construction: Principles and Practice */
/* Kenneth C. Louden */
/****************************************************/
#include “globals.h“
/* set NO_PARSE to TRUE to get a scanner-only compiler */
#define NO_PARSE FALSE//TRUE//FALSE
/* set NO_ANALYZE to TRUE to get a parser-only compiler */
#define NO_ANALYZE TRUE//FALSE
/* set NO_CODE to TRUE to get a compiler that does not
* generate code
*/
#define NO_CODE TRUE//FALSE
#include “util.h“
#if NO_PARSE
#include “scan.h“
#else
#include “parse.h“
/*
#if !NO_ANALYZE //这里用不着
#include “analyze.h“
#if !NO_CODE
#include “cgen.h“
#endif
#endif
*/
#endif
/* allocate global variables */
int lineno = 0;
FILE * source;
FILE * listing;
FILE * code;
extern int linepos ; /* current position in LineBuf */
extern int bufsize ; /* current size of buffer string */
extern int EOF_flag ; /* corrects ungetNextChar behavior on EOF */
/* allocate and set tracing flags */
int EchoSource = FALSE;
int TraceScan = FALSE;
int TraceParse = FALSE;//TRUE;
int TraceAnalyze = FALSE; //这里用不着
int TraceCode = FALSE;
int Error = FALSE;
/*用.def文件创建DLL先删除上个应用程序中的stdafx.h文件,然后删除libtiny.cpp文件
同时往该工程中加入一个文本文件,命名为libtiny.def,再在该文件中加入如下代码:
LIBRARY MyDll
EXPORTS
Max
Min
其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称
我们可以在.def文件中的导出函数后加@n(n!=1),如Max@1,Min@2,表示要导出的函数顺序号
*/
int add(int aint b) //用于建立动态链接,见libtiny.def
{
return a+b;
}
void ini_tiny() //初始化
{
lineno = 0;
source=NULL;
listing=NULL;
code=NULL;
//////////
/* linepos=0;
bufsize=0;
EOF_flag=FALSE;*/
}
//重写主函数
int tiny_main(char *pgmTreeNode * tmp_syntaxTreeconst char * filename)//int argc char * argv[] )
{
ini_tiny();
TreeNode * syntaxTree;/**/
// char pgm[120]; /* source code file name */
/* if (argc != 2)
{ fprintf(stderr“usage: %s \n“argv[0]);
exit(1);
}
strcpy(pgmargv[1]) ;*/
// strcpy(pgm“SAMPLE.TNY“);
if (strchr (pgm ‘.‘) == NULL) //Strchr()函数是用来判断一个字符是否在一个字符串中出现
strcat(pgm“.tny“); //字符串连接函数
source = fopen(pgm“r“);
if (source==NULL) //文件为空,则终止
{ fprintf(stderr“File %s not found\n“pgm);
exit(1);
}
if(filename==NULL)
{
listing = stdout; /* send listing to screen */
}
else
{
listing=fopen(filename“w+“); //w+是写模式
}
fprintf(listing“\nTINY COMPILATION: %s\n“pgm);
#if NO_PARSE
while (getToken()!=ENDFILE);
#else
syntaxTree = parse();
tmp_syntaxTree->attr=syntaxTree->attr; //把语法树赋给临时语法树,以便下次处理
for(int i=0;i tmp_syntaxTree->child[i]=syntaxTree->child[i];
tmp_syntaxTree->sibling=syntaxTree->sibling;
tmp_syntaxTree->lineno=syntaxTree->lineno;
tmp_syntaxTree->nodekind=syntaxTree->nodekind;
tmp_synt
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 675 2011-01-11 21:13 语法分析\.error
文件 9261 2011-01-09 00:12 语法分析\libtiny\Debug\ANALYZE.obj
文件 18628 2011-01-09 00:12 语法分析\libtiny\Debug\CGEN.obj
文件 8234 2011-01-09 00:12 语法分析\libtiny\Debug\CODE.obj
文件 241742 2011-01-09 15:06 语法分析\libtiny\Debug\libtiny.dll
文件 788 2011-01-09 15:06 语法分析\libtiny\Debug\libtiny.exp
文件 298524 2011-01-09 15:06 语法分析\libtiny\Debug\libtiny.ilk
文件 2252 2011-01-09 15:06 语法分析\libtiny\Debug\libtiny.lib
文件 211356 2011-01-09 15:06 语法分析\libtiny\Debug\libtiny.pch
文件 615424 2011-01-09 15:06 语法分析\libtiny\Debug\libtiny.pdb
文件 17654 2011-01-09 15:06 语法分析\libtiny\Debug\PARSE.obj
文件 12040 2011-01-09 15:06 语法分析\libtiny\Debug\SCAN.obj
文件 6514 2011-01-09 00:12 语法分析\libtiny\Debug\SYMTAB.obj
文件 7217 2011-01-09 15:06 语法分析\libtiny\Debug\tiny.obj
文件 16189 2011-01-09 15:06 语法分析\libtiny\Debug\UTIL.obj
文件 41984 2011-01-09 15:06 语法分析\libtiny\Debug\vc60.idb
文件 53248 2011-01-09 15:06 语法分析\libtiny\Debug\vc60.pdb
文件 3123 2011-01-09 01:10 语法分析\libtiny\GLOBALS.H
文件 48 2011-01-09 15:06 语法分析\libtiny\libtiny.def
文件 4534 2011-01-09 00:12 语法分析\libtiny\libtiny.dsp
文件 539 2011-01-09 00:12 语法分析\libtiny\libtiny.dsw
文件 148480 2011-01-09 23:01 语法分析\libtiny\libtiny.ncb
文件 50688 2011-01-09 23:01 语法分析\libtiny\libtiny.opt
文件 1654 2011-01-09 15:06 语法分析\libtiny\libtiny.plg
文件 7138 2011-01-09 23:01 语法分析\libtiny\PARSE.C
文件 559 2011-01-09 00:12 语法分析\libtiny\PARSE.H
文件 6169 2011-01-09 21:11 语法分析\libtiny\SCAN.C
文件 693 2011-01-09 00:12 语法分析\libtiny\SCAN.H
文件 4194 2011-01-09 15:06 语法分析\libtiny\tiny.cpp
文件 5762 2011-01-09 00:12 语法分析\libtiny\UTIL.C
............此处省略61个文件信息
- 上一篇:基于easyx的人机对战五子棋
- 下一篇:MFC 下写的SVM类
相关资源
- C++语法分析器
- LL1语法分析器(c++)
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- LL(1)语法分析器C++版
- LR(0)语法分析器程序
- 编译原理课程设计词法语法分析器
- 编译原理LL1语法分析器C++版源代码
- 编译原理课程设计LR(0)语法分析器
- 编译原理实验语法分析器
- cminus语法分析器源代码完整版
- 基于算符优先分析方法的表达式语法
- 基于预测分析方法的表达式语法分析
- c++源码C-语法分析器源代码
- c语言语法分析器
- PL0语法分析器(递归子程序法)
- 编译原理实践:C++实现语法分析器.
- 预测分析语法分析器(c++源代码)
- 编译原理-语法分析器C语言源码
- 用C语言变的语法分析器
- 递归下降语法分析器C++实现
- 编译原理 LL1语法分析器
- 编译原理语法分析器SLR(1)
- 简单的c语言语法分析器
- 词法分析C语言源代码附实验报告
- 语法分析器C语言源代码附实验报告
- 递归下降分析法实现LL(1)文法的语
- 编译原理实验c++实现LR(1)语法分析
- C语言 语法分析器 源代码
评论
共有 条评论