mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
10 KiB
222 lines
10 KiB
#define MAXLINE 256 // Max line length
|
|
#define MAXTOK 128 // Max token length
|
|
|
|
// All ST_XXX constants are tokens. The first are the single-char tokens.
|
|
//---------------------------------------------------------------------------
|
|
#define ST_PLUS 0
|
|
#define ST_MINUS 1
|
|
#define ST_MULTIPLY 2
|
|
#define ST_DIVIDE 3
|
|
#define ST_LPAREN 4
|
|
#define ST_RPAREN 5
|
|
#define ST_LSQUARE 6
|
|
#define ST_RSQUARE 7
|
|
#define ST_EQUAL 8
|
|
#define ST_DOLLAR 9
|
|
#define ST_PERCENT 10
|
|
#define ST_AMPERSAND 11
|
|
// commented out because there is a key word #32770
|
|
//#define ST_POUND 12
|
|
#define ST_COMMA 13
|
|
#define ST_PERIOD 14
|
|
#define ST_COLON 15
|
|
#define ST_SEMICOLON 16
|
|
#define ST_EOL 17
|
|
|
|
// Relop tokens
|
|
//----------------------
|
|
#define ST_GREATER 18
|
|
#define ST_LESS 19
|
|
#define ST_GREATEREQ 20
|
|
#define ST_LESSEQ 21
|
|
#define ST_NOTEQUAL 22
|
|
|
|
// Special tokens
|
|
//----------------------
|
|
#define ST_ENDFILE 23
|
|
#define ST_IDENT 24
|
|
#define ST_UNKNOWN 25
|
|
#define ST_NUMBER 26
|
|
#define ST_QUOTED 27
|
|
#define ST_DOTDOTDOT 28
|
|
|
|
// Keyword tokens
|
|
//----------------------
|
|
#define ST__RESFIRST 29
|
|
|
|
#define ST_32770 29
|
|
#define ST_BEGIN 30
|
|
#define ST_BUTTON 31
|
|
#define ST_CAPTION 32
|
|
#define ST_CHECKED 33
|
|
#define ST_COMBOBOX 34
|
|
#define ST_DIALOG 35
|
|
#define ST_EDIT 36
|
|
#define ST_END 37
|
|
#define ST_GRAYED 38
|
|
#define ST_GROUPBOX 39
|
|
#define ST_HELP 40
|
|
#define ST_ICON 41
|
|
#define ST_INACTIVE 42
|
|
#define ST_LISTBOX 43
|
|
#define ST_MENU 44
|
|
#define ST_MENUBARBREAK 45
|
|
#define ST_MENUBREAK 46
|
|
#define ST_MENUITEM 47
|
|
#define ST_POPUP 48
|
|
#define ST_SCROLLBAR 49
|
|
#define ST_SEPARATOR 50
|
|
#define ST_STATIC 51
|
|
#define ST_STYLE 52
|
|
|
|
#define ST__RESLAST 52
|
|
#define ST__COUNT (ST__RESLAST-ST__RESFIRST+1)
|
|
|
|
// Macro to access a ST string (key-token)
|
|
//---------------------------------------------------------------------------
|
|
#define KT(x) ((char FAR *)kwds[x])
|
|
|
|
// Lexical analyzation macros
|
|
//---------------------------------------------------------------------------
|
|
#define IsIdentFirst(c) (((unsigned char)c>191)||(((unsigned char)c<128)&&(isalpha(c&0x7f)||(c=='_')||(c=='#'))))
|
|
#define IsIdentChar(c) (((unsigned char)c>191)||(((unsigned char)c<128)&&(isalnum(c&0x7f)||(c=='_')||(c=='#'))))
|
|
|
|
// Parse-time error codes
|
|
//---------------------------------------------------------------------------
|
|
#define PRS_SYNTAX 0 // Syntax error
|
|
#define PRS_OOM 1 // Out of memory
|
|
#define PRS_BADFILE 2 // Can't open file
|
|
#define PRS_EOF 3 // Unexpected EOF
|
|
#define PRS_LONGTKN 4 // Token too long
|
|
#define PRS_LONGSTR 5 // String too long
|
|
#define PRS_COMMA 6 // Comma expected
|
|
#define PRS_NUMBER 7 // Number expected
|
|
#define PRS_EOL 8 // EOL expected
|
|
#define PRS_NOCQ 9 // No closing (")
|
|
|
|
/*
|
|
#define PRS_NOCQ 2 // No closing (")
|
|
#define PRS_UGOVER 6 // Unget buffer overflow
|
|
#define PRS_UOP 8 // Unknown upcode
|
|
#define PRS_DUPLBL 9 // Duplicate label
|
|
#define PRS_TYPEMIS 10 // Type mismatch
|
|
#define PRS_UNRES 11 // Unresolved label found
|
|
#define PRS_COMPLEX 12 // Expression too complex
|
|
#define PRS_STRCPLX 13 // String expression too complex
|
|
#define PRS_TOODEEP 14 // Nesting level too deep
|
|
#define PRS_NOIF 15 // ENDIF without IF
|
|
#define PRS_NOFOR 16 // NEXT without FOR
|
|
#define PRS_BLKERR 17 // Block nesting error
|
|
#define PRS_NOEIF 18 // IF without ENDIF
|
|
#define PRS_NONXT 19 // FOR without NEXT
|
|
#define PRS_RPAREN 20 // ')' expected
|
|
#define PRS_LPAREN 21 // '(' expected
|
|
#define PRS_OFFON 22 // OFF or ON expected
|
|
#define PRS_COMMA 23 // Comma expected
|
|
#define PRS_INFORL 24 // Illegal inside FOR/IN loop
|
|
#define PRS_POUND 25 // '#' expected
|
|
#define PRS_FOREXP 26 // 'FOR' expected
|
|
#define PRS_STRVAR 27 // string variable expected
|
|
#define PRS_VPPARM 28 // ON/OFF/CLEAR expected
|
|
#define PRS_CASE 29 // CASE expected
|
|
#define PRS_NOSEL 30 // Not within SELECT CASE
|
|
#define PRS_DECLS 31 // Too many DECLAREs
|
|
#define PRS_LABLONG 32 // Label too long
|
|
#define PRS_INCOVER 33 // Too many nested '$include:
|
|
#define PRS_META 34 // Metacommand error
|
|
#define PRS_DUPDEF 35 // Duplicate Definition
|
|
#define PRS_AS 36 // AS expected
|
|
#define PRS_SUBNDEF 37 // Subprogram not defined
|
|
#define PRS_FNNDEF 38 // Function not defined
|
|
#define PRS_NOSUB 39 // END SUB without SUB
|
|
#define PRS_NOFN 40 // END FUNCTION without FUNCTION
|
|
#define PRS_TYPEID 41 // Type identifier expexted
|
|
#define PRS_DIMID 42 // DIM'd var cannot have typeid
|
|
#define PRS_CONST 43 // Integer constant expected
|
|
#define PRS_BADARY 44 // Bad array bound
|
|
#define PRS_FIXED 45 // FLS expected
|
|
#define PRS_ENDTYPE 46 // "END TYPE" expected
|
|
#define PRS_FIELD 47 // Field name expected
|
|
#define PRS_DOT 48 // "." expected
|
|
#define PRS_UNKNOWN 49 // Unknown error
|
|
#define PRS_FROM 50 // "FROM" expected
|
|
#define PRS_NOTRAP 51 // END TRAP without TRAP
|
|
#define PRS_STRCONST 52 // String constant expected
|
|
#define PRS_NOTRAPS 53 // Too many traps
|
|
#define PRS_TRAPSET 54 // Trap already set
|
|
#define PRS_EQUAL 55 // "=" expected
|
|
#define PRS_BY 56 // "BY" expected
|
|
#define PRS_SRTCRIT 57 // "NAME" or "EXTENSION" expected
|
|
#define PRS_GLOBAL 58 // GLOBAL not valid inside CS
|
|
#define PRS_VAREXP 59 // Variable expected
|
|
#define PRS_ENDBLK 60 // FOR, SUB, FUNCTION, or TRAP ex
|
|
#define PRS_WENDEXP 61 // WHILE without WEND
|
|
#define PRS_ENDSELECT 62 // END SELECT expected
|
|
#define PRS_ENDSUB 63 // END SUB expected
|
|
#define PRS_ENDFUNC 64 // END FUNCTION expected
|
|
#define PRS_ENDTRAP 65 // END TRAP expected
|
|
#define PRS_DIVZERO 66 // CONST div by zero
|
|
#define PRS_NOWHILE 67 // WEND without WHILE
|
|
#define PRS_HEXCONST 68 // Hexidecimal constant expected
|
|
#define PRS_RESERVED 69 // Illegal use of reserved word
|
|
#define PRS_NOARY 70 // FOR index ! Array elements
|
|
#define PRS_IDXUSED 71 // FOR idx var in used
|
|
#define PRS_RELOP 72 // Relational operator expected
|
|
#define PRS_RETTYPE 73 // Illegal DLL function ret type
|
|
#define PRS_SUBFN 74 // SUB or FUNCTION expected
|
|
#define PRS_IDENT 75 // Identifier expected
|
|
#define PRS_BADPTID 76 // Invalid Parameter Type
|
|
#define PRS_PARMCOUNT 77 // Too Many Parameters
|
|
#define PRS_ERREXP 78 // ERROR or END expected
|
|
#define PRS_GOTOEXP 79 // GOTO expected
|
|
#define PRS_MAINONLY 80 // Invalid inside sub/fn/trap
|
|
#define PRS_BADASSN 81 // Invalid assignment type
|
|
#define PRS_TO 82 // TO expected
|
|
#define PRS_RSQUARE 83 // ']' expected
|
|
#define PRS_ILLNULL 84 // Illegal use of NULL function
|
|
#define PRS_OVERFLOW 85 // Overflow
|
|
#define PRS_BADONEND 86 // Must specify sub w/ no parms
|
|
#define PRS_ONENDOVER 87 // Too many ON END subs
|
|
#define PRS_TYPERECUR 88 // Recursive type definition
|
|
#define PRS_STATICEXP 89 // STATIC expected
|
|
#define PRS_LIBEXP 90 // LIB expected
|
|
#define PRS_DOTCDECL 91 // "..." only allowed with CDECL
|
|
#define PRS_UNDECL 92 // Undeclared Identifier
|
|
*/
|
|
|
|
// Global Variables
|
|
//-----------------------------------------------------------------------------
|
|
extern LONG psrstrs[];
|
|
extern LONG kwds[];
|
|
INT LINEIDX;
|
|
HFILE hImprtFile;
|
|
INT LINENO;
|
|
INT STLINE;
|
|
INT STLIDX;
|
|
INT WASWHITE;
|
|
BOOL fLineFetched;
|
|
INT CurState;
|
|
INT ParseError; // Indicates parsing error
|
|
INT gErrCode;
|
|
|
|
//---------------------------------------------------------------------------
|
|
// This section is the global variable *INITIALIZATION* section. Any
|
|
// global variable that needs to be initialized on declaration should go in
|
|
// here, but ALSO needs to go in the DECLARATION section below, without its
|
|
// initialization part.
|
|
//---------------------------------------------------------------------------
|
|
CHAR TOKENBUF[MAXTOK]; // Token buffer
|
|
CHAR UNGETBUF[MAXTOK]; // Push-token buffer
|
|
|
|
// Prototypes
|
|
//---------------------------------------------------------------------------
|
|
|
|
// Private
|
|
static BOOL FetchLine (LPSTR, INT, INT FAR *);
|
|
static VOID die(INT errnum);
|
|
static INT IsReserved(CHAR *tok);
|
|
static VOID put_char(CHAR c);
|
|
|
|
// Public
|
|
INT get_token(VOID);
|
|
VOID Quoted2String(LPSTR lpszQuoted);
|