// pgen-h-s.txt

//  public release som v4.0   2 July 2008
//  public release som v4.1   9 Aug 2008 (Birthday)
//  public release som v4.2a  23 Sept 2009

// sequence of loading files
//
// lib.som
// string-s.txt
// pgen-h-s.txt
// list-s.txt
// main-s.txt

enum	// marker
	1 NIL MARK BMARK
enum	// atom
	4 SP TERM NONTERM STRING

enum	// token type
	14 tkIDEN tkNUMBER tkSTRING tkEOF tkERROR
enum	// token
	50 tkSTAR tkSLASH tkMINUS tkPLUS tkEQ tkEQEQ
	tkAND tkBAR tkCARET tkMOD tkNOT tkNE tkLT tkLE
	tkLTLT tkGT tkGE tkGTGT tkCOLON tkLPAREN tkRPAREN
	tkLBRACKET tkRBRACKET tkBB tkBE tkTO tkIF tkELSE
	tkWHILE tkFOR tkBREAK tkARRAY tkCASE tkENUM tkSYSCALL

enum
	500 MAXYSTK		// size of parser stack

//  system area  1 .. MAXSYS-1

//  250..299 tokstring
//  101  mode
//  102  tokvalue
//  103  tokcol
//  104  line

: line = M[104]
: setline n = M[104] = n

to initPgen | a =
	M = 0
	verbose = 1
	setline 0			// line
	FI = 0				// input file
	FO = 1				// output file
	tokstring = 250
	tok = 0
	ystack = array MAXYSTK  // parser stack
	ysp = 0
	sbuf = array 80			// string buffer
	lexflag = 0
	lhs = 0
	loopflag = 0
	nilflag = 0

: fspace = fprintc FO 32
: fnl = fprintc FO 10

// error during parsing
to seterror s =
	prints "line " print line space
	prints s nl
	exit

to warning nm mess =
	if verbose
		prints "Warning: "
		if nm != 0
			prints nm space
		prints mess nl

// End
