📄 main.c
字号:
/****************************************************//* 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/* set NO_ANALYZE to TRUE to get a parser-only compiler */#define NO_ANALYZE FALSE/* set NO_CODE to TRUE to get a compiler that does not * generate code */#define NO_CODE 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;/* allocate and set tracing flags */int EchoSource = FALSE;int TraceScan = FALSE;int TraceParse = FALSE;int TraceAnalyze = FALSE;int TraceCode = FALSE;int Error = FALSE;main( int argc, char * argv[] ){ TreeNode * syntaxTree; char pgm[120]; /* source code file name */ if (argc != 2) { fprintf(stderr,"usage: %s <filename>\n",argv[0]); exit(1); } strcpy(pgm,argv[1]) ; if (strchr (pgm, '.') == NULL) strcat(pgm,".tny"); source = fopen(pgm,"r"); if (source==NULL) { fprintf(stderr,"File %s not found\n",pgm); exit(1); } listing = stdout; /* send listing to screen */ fprintf(listing,"\nTINY COMPILATION: %s\n",pgm);#if NO_PARSE while (getToken()!=ENDFILE);#else syntaxTree = parse(); if (TraceParse) { fprintf(listing,"\nSyntax tree:\n"); printTree(syntaxTree); }#if !NO_ANALYZE if (! Error) { if (TraceAnalyze) fprintf(listing,"\nBuilding Symbol Table...\n"); buildSymtab(syntaxTree); if (TraceAnalyze) fprintf(listing,"\nChecking Types...\n"); typeCheck(syntaxTree); if (TraceAnalyze) fprintf(listing,"\nType Checking Finished\n"); }#if !NO_CODE if (! Error) { char * codefile; int fnlen = strcspn(pgm,"."); codefile = (char *) calloc(fnlen+4, sizeof(char)); strncpy(codefile,pgm,fnlen); strcat(codefile,".tm"); code = fopen(codefile,"w"); if (code == NULL) { printf("Unable to open %s\n",codefile); exit(1); } codeGen(syntaxTree,codefile); fclose(code); }#endif#endif#endif fclose(source); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -