C_Minus.c
上传用户:wqdrylgs
上传日期:2007-02-09
资源大小:65k
文件大小:2k
源码类别:

汇编语言

开发平台:

WINDOWS

  1. #include "globals.h"
  2. #include "util.h"
  3. #include "scan.h"
  4. #include "parse.h"
  5. #include "symtab.h"
  6. #include "analyze.h"
  7. #include "CodeGen.h"
  8. #define NO_ANALYZE FALSE
  9. /* allocate global variables */
  10. int lineno = 0;
  11. FILE * source;
  12. FILE * listing;
  13. FILE * inter_code;
  14. /* allocate and set tracing flags */
  15. int TraceScan = TRUE;
  16. int TraceParse = TRUE;
  17. int TraceAnalyze = TRUE;
  18. int Error = FALSE;
  19. int main(int argc, char * argv[])
  20. {
  21. TreeNode * syntaxTree;
  22. char cfile[20], codefile[20]; /* sourse code file name */
  23. if(argc != 2)
  24. {
  25. fprintf(stderr,"Usage: %s <filename>n",argv[0]);
  26. exit(1);
  27. }
  28. strcpy(codefile, argv[1]);
  29. if (strchr(codefile, '.') != NULL) {
  30. int len = strcspn(codefile, ".");
  31. strncpy(cfile, codefile, len);
  32. cfile[len] = '';
  33. }
  34. else {
  35. strcpy(cfile, codefile);
  36. strcat(codefile, ".c");
  37. }
  38. source = fopen(codefile,"r");
  39. if (source==NULL)
  40. printf("File %s not found!n", codefile);
  41. exit(1);
  42. }
  43. strcpy(codefile, cfile);
  44. strcat(codefile, ".lst"); 
  45. listing = fopen(codefile,"w"); 
  46. if (listing == NULL)
  47. printf("Unable to open %sn", codefile);
  48. exit(1);
  49. }
  50. /* compilation begins here */
  51. syntaxTree = parse();
  52. if (TraceParse) {
  53. fprintf(listing,"nSyntax tree:n");
  54. printTree(syntaxTree);
  55. }
  56. #if !NO_ANALYZE
  57. if (!Error)
  58. {
  59. fprintf(listing,"nBuilding Symbol Table...n");
  60. buildSymtab(syntaxTree);
  61. fprintf(listing,"nChecking Types...n");
  62. typeCheck(syntaxTree);
  63. fprintf(listing,"nType Checking Finishedn");
  64. }
  65. #if !NO_CODE
  66. if (!Error)
  67. strcpy(codefile, cfile);
  68. strcat(codefile, ".asm"); 
  69. inter_code = fopen(codefile,"w");
  70. if (inter_code == NULL)
  71. printf("Unable to open %sn", codefile);
  72. exit(1);
  73. }
  74. pTable = GlobalTable;
  75. StackSegmentBegin();
  76. StackSegmentEnd();
  77. CodeSegmentBegin();
  78. write();
  79. CodeGen_TreeNode(syntaxTree);
  80. CodeSegmentEnd();
  81. fclose(inter_code);
  82. }
  83. #endif
  84. #endif
  85. fclose(source);
  86. fclose(listing);
  87. return 0;
  88. }