util.c

来自「本程序是 《编译原理与实践》一书中2.35 习题的解答。主要用到了 yyless」· C语言 代码 · 共 56 行

C
56
字号
/* File: util.c
   Utility function implementation for the TINY compiler 
*/

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

/* Procedure pritToken prints a token and its lexeme to the listing file */
void printToken ( TokenType token, const char* tokenString )
{
     switch(token)
     {
           case IF:
           case THEN:
           case ELSE:
           case END:
           case REPEAT:
           case UNTIL:
           case READ:
           case WRITE:      
                fprintf(listing, "reserved word: %s\n", tokenString);
                break;
           case ASSIGN: fprintf(listing, ":=\n"); break;
           case LT: fprintf(listing, "<\n"); break;
           case EQ: fprintf(listing, "=\n"); break;
           case LPAREN: fprintf(listing, "(\n"); break;
           case RPAREN: fprintf(listing, ")\n"); break;
           case SEMI: fprintf(listing, ";\n"); break;
           case PLUS: fprintf(listing, "+\n"); break;
           case MINUS: fprintf(listing, "-\n"); break;
           case TIMES: fprintf(listing, "*\n"); break;
           case OVER: fprintf(listing, "/\n"); break;
           case ENDFILE: fprintf(listing, "EOF\n"); break;
           case NUM: fprintf(listing, "NUM, val=%s\n",tokenString); break;
           case ID: fprintf(listing, "ID, name=%s\n",tokenString); break;
           case ERROR: fprintf(listing, "ERROR, %s\n",tokenString); break;
           default: //This should never happen
                    fprintf(listing, "Unknown token:%s\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 = malloc(n);
      if(t==NULL)
        fprintf(listing, "Out of memory error at line %d\n", lineno);
      else strcpy(t,s);
      return t;
}

⌨️ 快捷键说明

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