%
%   LIDO generated for grammar 'NoName' 
%

RULE rule_001 : 
  Source ::=  Range
COMPUTE
END;

RULE rule_002 : 
  Range ::=  'declare' Declaration_list 'begin' Expression 'end'
COMPUTE
END;

RULE rule_003 : 
  Declaration_list ::=  Declaration
COMPUTE
END;

RULE rule_004 : 
  Declaration_list ::=  Declaration_list ';' Declaration
COMPUTE
END;

RULE rule_005 : 
  Declaration ::=  IdDef ':' 'integer'
COMPUTE
END;

RULE rule_006 : 
  Declaration ::=  IdDef 'is' Expression ':' 'integer'
COMPUTE
END;

RULE rule_007 : 
  Expression ::=  Expression ';' Expression
COMPUTE
END;

RULE rule_008 : 
  Expression ::=  'while' Expression 'do' Expression 'end'
COMPUTE
END;

RULE rule_009 : 
  Expression ::=  Expression Binop Expression
COMPUTE
END;

RULE rule_010 : 
  Expression ::=  Unop Expression
COMPUTE
END;

RULE rule_011 : 
  Expression ::=  IdUse
COMPUTE
END;

RULE rule_012 : 
  Binop ::=  ':='
COMPUTE
END;

RULE rule_013 : 
  Binop ::=  'or'
COMPUTE
END;

RULE rule_014 : 
  Binop ::=  'and'
COMPUTE
END;

RULE rule_015 : 
  Binop ::=  '='
COMPUTE
END;

RULE rule_016 : 
  Binop ::=  '<'
COMPUTE
END;

RULE rule_017 : 
  Binop ::=  '>'
COMPUTE
END;

RULE rule_018 : 
  Binop ::=  '+'
COMPUTE
END;

RULE rule_019 : 
  Binop ::=  '-'
COMPUTE
END;

RULE rule_020 : 
  Binop ::=  '*'
COMPUTE
END;

RULE rule_021 : 
  Binop ::=  'div'
COMPUTE
END;

RULE rule_022 : 
  Binop ::=  'mod'
COMPUTE
END;

RULE rule_023 : 
  Unop ::=  'not'
COMPUTE
END;

RULE rule_024 : 
  Unop ::=  '+'
COMPUTE
END;

RULE rule_025 : 
  Unop ::=  '-'
COMPUTE
END;

RULE rule_026 : 
  Expression ::=  Integer
COMPUTE
END;

RULE rule_027 : 
  Expression ::=  Range
COMPUTE
END;

RULE rule_028 : 
  Expression ::=  'if' Expression 'then' Expression 'end'
COMPUTE
END;

RULE rule_029 : 
  Expression ::=  'if' Expression 'then' Balanced 'end'
COMPUTE
END;

RULE rule_030 : 
  Balanced ::=  Expression 'else' Expression
COMPUTE
END;


SYMBOL RootNest:
		Env:		Environment	SYNT;
SYMBOL RangeNest:
		Env:		Environment	INH;

SYMBOL RootNest, RangeNest:
		GotLocKey:	VOID		SYNT;
SYMBOL RangeNest:
		GotKey:	VOID		INH;
SYMBOL RootNest:
		GotKey:	VOID		SYNT;

SYMBOL IdDefNest, IdUseNest:	
		Key:	DefTableKey	SYNT,
		Sym:		int;

SYMBOL RootNest	COMPUTE
SYNT.Env = NewEnv ();
SYNT.GotLocKey = 1;
SYNT.GotKey =
	CONSTITUENTS RangeNest.GotLocKey;
END;

SYMBOL RangeNest	COMPUTE
INH.Env =
	NewScope (INCLUDING (RangeNest.Env, 
				RootNest.Env));
SYNT.GotLocKey =
	CONSTITUENTS IdDefNest.Key;
INH.GotKey =
	INCLUDING (RangeNest.GotLocKey,
			RootNest.GotLocKey)
	DEPENDS_ON SYNT.GotLocKey;
END;

SYMBOL IdDefNest	COMPUTE
SYNT.Key = 
	DefineIdn (INCLUDING (RangeNest.Env,
				RootNest.Env), 
		THIS.Sym);
END;

SYMBOL IdUseNest	COMPUTE
SYNT.Key =
	KeyInEnv (INCLUDING (RangeNest.Env,
				RootNest.Env), 
		THIS.Sym)
	DEPENDS_ON INCLUDING (RangeNest.GotKey,
				RootNest.GotLocKey);
IF (EQ (SYNT.Key, NoKey),
message (ERROR, "identifier not defined", 0, COORDREF));
END;
%
%   LIDO generated for grammar 'NoName' 
%

ATTR Sym: int;

SYMBOL Source INHERITS RootNest
END;

SYMBOL Range INHERITS RangeNest
END;

SYMBOL IdDef INHERITS IdDefNest
END;

SYMBOL IdUse INHERITS IdUseNest
END;

RULE rule_031 : 
  IdDef ::=  Identifier
COMPUTE
  IdDef.Sym = Identifier.Sym;
END;

RULE rule_032 : 
  IdUse ::=  Identifier
COMPUTE
  IdUse.Sym = Identifier.Sym;
END;

