⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.cpp

📁 词法分析
💻 CPP
字号:
/****************************************************/
/* File: util.c                                     */
/* Utility function implementation                  */
/* for the C_Minus compiler                         */
/****************************************************/

#include "globals.h"
#include "util.h"
#include "parseLL_1.h"



void printToken( TokenType token, const char* tokenString )
{ 
	switch (token)
  { case IF:
    case ELSE:
    case INT:
    case RETURN:
    case VOID:
    case WHILE:
      fprintf(scan,
         "reserved word: %s\n",tokenString);
      break;
    case ASSIGN: fprintf(scan,"=\n"); break;
    case LT: fprintf(scan,"<\n"); break;
	case GT: fprintf(scan,"<=\n"); break;
	case LE: fprintf(scan,">\n"); break;
	case GE: fprintf(scan,">=\n"); break;
    case EQ: fprintf(scan,"==\n"); break;
    case NOEQ: fprintf(scan,"!=\n"); break;
    case LPAREN: fprintf(scan,"(\n"); break;
    case RPAREN: fprintf(scan,")\n"); break;
    case LINDEX: fprintf(scan,"[\n"); break;
    case RINDEX: fprintf(scan,"]\n"); break;
    case LBRACE: fprintf(scan,"{\n"); break;
    case RBRACE: fprintf(scan,"}\n"); break;
	case COMMA: fprintf(scan,",\n"); break;
    case SEMI: fprintf(scan,";\n"); break;
    case PLUS: fprintf(scan,"+\n"); break;
    case MINUS: fprintf(scan,"-\n"); break;
    case TIMES: fprintf(scan,"*\n"); break;
    case OVER: fprintf(scan,"/\n"); break;
    case ENDFILE: fprintf(scan,"EOF\n"); break;
    case NUM:
     fprintf(scan,
          "NUM, val= %s\n",tokenString);
      break;
    case ID:
      fprintf(scan,
          "ID, name= %s\n",tokenString);
      break;
    case ERROR:
      fprintf(scan,
          "ERROR: %s\n",tokenString);
      break;
    default: /* should never happen */
      fprintf(scan,"Unknown token: %d\n",token);
  }
}

/* function copyString allocates and makes a new
 * copy of an existing string
 */
char * copyString(char * s)
{ int n;
  char * t;
  if (s==NULL) return NULL;
  n = strlen(s)+1;
  t =(char *) malloc(n);
  if (t==NULL); 
  else strcpy(t,s);
  return t;
}


/********* printSpaces indents by printing spaces */
static void printSpaces(int indentno)
{ int i=0;
  for (i=0;i<indentno;i++)
    fprintf(stree,"  ");
}

/* procedure printTree prints a syntax tree to the 
 * listing file using indentation to indicate subtrees*/
 
void printTree(StreeNode * tree)
{ int i;
   if  (tree != NULL) {
	printSpaces(tree->layno);
	fprintf(stree,"%2d:",tree->layno);
	printToken4(tree->val,tree->tokenString);
	fprintf(stree,"\n");
  
  for(i=0;i<tree->childrenno;i++)
	  printTree(tree->child[i]);
  }
    
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -