103 lines
2.2 KiB
C
103 lines
2.2 KiB
C
/* T O K E N D E F I N I T I O N S */
|
|
|
|
#include "parameters.h"
|
|
#include "Lpars.h"
|
|
#include "LLlex.h"
|
|
#include "idf.h"
|
|
#include "tokenname.h"
|
|
#include "error.h"
|
|
|
|
/* To centralize the declaration of %tokens, their presence in this
|
|
file is taken as their declaration. The Makefile will produce
|
|
a grammar file (tokenfile.g) from this file. This scheme ensures
|
|
that all tokens have a printable name.
|
|
Also, the "symbol2str.c" file is produced from this file.
|
|
*/
|
|
|
|
#ifdef ____
|
|
struct tokenname tkspec[] = { /* the names of the special tokens */
|
|
{IDENT, "identifier"},
|
|
{STRING, "string"},
|
|
{INTEGER, "integer"},
|
|
{REAL, "real"},
|
|
{0, ""}
|
|
};
|
|
|
|
struct tokenname tkcomp[] = { /* names of the composite tokens */
|
|
{LESSEQUAL, "<="},
|
|
{GREATEREQUAL, ">="},
|
|
{NOTEQUAL, "<>"},
|
|
{UPTO, ".."},
|
|
{BECOMES, ":="},
|
|
{0, ""}
|
|
};
|
|
#endif /* ____ */
|
|
|
|
struct tokenname tkidf[] = { /* names of the identifier tokens */
|
|
{AND, "and"},
|
|
{ARRAY, "array"},
|
|
{BEGIN, "begin"},
|
|
{CASE, "case"},
|
|
{CONST, "const"},
|
|
{DIV, "div"},
|
|
{DO, "do"},
|
|
{DOWNTO, "downto"},
|
|
{ELSE, "else"},
|
|
{END, "end"},
|
|
{FILE, "file"},
|
|
{FOR, "for"},
|
|
{FUNCTION, "function"},
|
|
{GOTO, "goto"},
|
|
{IF, "if"},
|
|
{IN, "in"},
|
|
{LABEL, "label"},
|
|
{MOD, "mod"},
|
|
{NIL, "nil"},
|
|
{NOT, "not"},
|
|
{OF, "of"},
|
|
{OR, "or"},
|
|
{PACKED, "packed"},
|
|
{PROCEDURE, "procedure"},
|
|
{PROGRAM, "program"},
|
|
{RECORD, "record"},
|
|
{REPEAT, "repeat"},
|
|
{SET, "set"},
|
|
{THEN, "then"},
|
|
{TO, "to"},
|
|
{TYPE, "type"},
|
|
{UNTIL, "until"},
|
|
{VAR, "var"},
|
|
{WHILE, "while"},
|
|
{WITH, "with"},
|
|
{0, ""}
|
|
};
|
|
|
|
struct tokenname tkstandard[] = { /* standard identifiers */
|
|
/* These are the only standard identifiers entered here, because
|
|
* they can get a variable number of arguments, and there are
|
|
* special syntaxrules in the grammar for them
|
|
*/
|
|
{READ, "read"},
|
|
{READLN, "readln"},
|
|
{WRITE, "write"},
|
|
{WRITELN, "writeln"},
|
|
{0, ""}
|
|
};
|
|
|
|
/* Some routines to handle tokennames */
|
|
|
|
void reserve(register struct tokenname *resv)
|
|
{
|
|
/* The names of the tokens described in resv are entered
|
|
as reserved words.
|
|
*/
|
|
register struct idf *p;
|
|
|
|
while( resv->tn_symbol ) {
|
|
p = str2idf(resv->tn_name, 0);
|
|
if( !p ) fatal("out of Memory");
|
|
p->id_reserved = resv->tn_symbol;
|
|
resv++;
|
|
}
|
|
}
|