// TinC - Tiny, in C // tinc.h #define COMPILER "TinC v1.0\n\n" /*--------------------------------------------------------------*/ /* A clutch of constants */ #define FALSE 0 #define TRUE -1 #define EXIT_SUCCESS 0 #define EXIT_FAIL 1 #define STRTMPSIZE 256 #define TAB '\t' #define CR '\015' #define LF '\n' #define MAXSYMSIZE 16 #define MAXGLOBALS 1000 #define MAXLOCALS 64 #define MAXSTAGE 99000 /*--------------------------------------------------------------*/ /* Definition of Token Types, etc */ typedef char Symbol[MAXSYMSIZE+1]; #define NKW 8 #define NKW1 9 static Symbol KWlist[NKW] = {"if", "else", "endif", "while", "endwhile", "char", "end", "int" }; #define TOK_IDENTIFIER 'x' #define TOK_IF 'i' #define TOK_ELSE 'l' #define TOK_ENDIF 'e' #define TOK_WHILE 'w' #define TOK_ENDWHILE 'e' #define TOK_CHARDEF 'c' #define TOK_END 'e' #define TOK_NUM '#' #define TOK_INTDEF 'j' static char KWcode[NKW1 + 1] = {TOK_IDENTIFIER, TOK_IF, TOK_ELSE, TOK_ENDIF, TOK_WHILE, TOK_ENDWHILE, TOK_CHARDEF, TOK_END, TOK_INTDEF }; /*--------------------------------------------------------------*/ /* Data Type Sizes (in base units) - used in SizeOfType() */ // is the stack character (byte) or word based? ... #define CHARSTACK TRUE #ifdef CHARSTACK #define SIZEOFCHAR 1 #define SIZEOFINT 2 #else #define SIZEOFCHAR 1 #define SIZEOFINT 1 #endif /*--------------------------------------------------------------*/ /* return codes for WhatIs() */ #define UNKNOWN 0 #define LOCAL 1 #define GLOBAL 2 /*--------------------------------------------------------------*/ /* pcode definitions */ #define PC_LABEL 0 #define PC_CLEAR_PRIMARY 1 #define PC_NEGATE_PRIMARY 2 #define PC_NOT_PRIMARY 3 #define PC_MOVE_CONST_PRIMARY 4 #define PC_MOVE_VAR_PRIMARY 5 #define PC_PUSH_PRIMARY 6 #define PC_POPADD_PRIMARY 7 #define PC_POPSUB_PRIMARY 8 #define PC_POPMUL_PRIMARY 9 #define PC_POPDIV_PRIMARY 10 #define PC_POPAND_PRIMARY 11 #define PC_POPOR_PRIMARY 12 #define PC_POPXOR_PRIMARY 13 #define PC_POPCMP_PRIMARY 14 #define PC_SET_PRIMARY_EQ 15 #define PC_SET_PRIMARY_NE 16 #define PC_SET_PRIMARY_LT 17 #define PC_SET_PRIMARY_GT 18 #define PC_SET_PRIMARY_GE 19 #define PC_SET_PRIMARY_LE 20 #define PC_MOVE_PRIMARY_VAR 21 #define PC_BRANCH 22 #define PC_BRANCH_FALSE 23 #define PC_HEADER 24 #define PC_PROLOG 25 #define PC_EPILOG 26 #define PC_ALLOCATE 27 #define PC_GROWSTACK 28 #define PC_SHRINKSTACK 29 #define PC_MOVE_LVAR_PRIMARY 30 #define PC_MOVE_PRIMARY_LVAR 31 #define PC_MOVE_A_PRIMARY 32 #define PC_MOVE_AL_PRIMARY 33 #define PC_POP_SECONDARY 34 #define PC_ADJUST_SECONDARY 35 #define PC_MOVE_SI_PRIMARY 36 #define PC_ADD_PRIMARY_SEC 37 #define PC_MOVE_PRIMARY_SI 38 #define PC_PUSH_SECONDARY 39 #define PC_PRIMARY_SECONDARY 40