• 大小: 2.32MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-06
  • 语言: C/C++
  • 标签:

资源简介

这是一个单文档的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个文件信息

评论

共有 条评论