text: /* 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++;
  	}
  }
  