src/HOL/TPTP/TPTP_Parser/ml-yacc/lib/base.sig
author sultana
Fri, 09 Mar 2012 15:39:00 +0000
changeset 46845 6431a93ffeb6
permissions -rw-r--r--
added ml-yacc library sources;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46845
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     1
(* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     2
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     3
(* base.sig: Base signature file for SML-Yacc.  This file contains signatures
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     4
   that must be loaded before any of the files produced by ML-Yacc are loaded
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     5
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     6
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     7
(* STREAM: signature for a lazy stream.*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     8
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     9
signature STREAM =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    10
 sig type 'xa stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    11
     val streamify : (unit -> '_a) -> '_a stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    12
     val cons : '_a * '_a stream -> '_a stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    13
     val get : '_a stream -> '_a * '_a stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    14
 end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    15
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    16
(* LR_TABLE: signature for an LR Table.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    17
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    18
   The list of actions and gotos passed to mkLrTable must be ordered by state
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    19
   number. The values for state 0 are the first in the list, the values for
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    20
    state 1 are next, etc.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    21
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    22
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    23
signature LR_TABLE =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    24
    sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    25
        datatype ('a,'b) pairlist = EMPTY | PAIR of 'a * 'b * ('a,'b) pairlist
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    26
	datatype state = STATE of int
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    27
	datatype term = T of int
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    28
	datatype nonterm = NT of int
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    29
	datatype action = SHIFT of state
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    30
			| REDUCE of int
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    31
			| ACCEPT
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    32
			| ERROR
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    33
	type table
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    34
	
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    35
	val numStates : table -> int
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    36
	val numRules : table -> int
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    37
	val describeActions : table -> state ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    38
				(term,action) pairlist * action
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    39
	val describeGoto : table -> state -> (nonterm,state) pairlist
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    40
	val action : table -> state * term -> action
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    41
	val goto : table -> state * nonterm -> state
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    42
	val initialState : table -> state
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    43
	exception Goto of state * nonterm
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    44
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    45
	val mkLrTable : {actions : ((term,action) pairlist * action) array,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    46
			 gotos : (nonterm,state) pairlist array,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    47
			 numStates : int, numRules : int,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    48
			 initialState : state} -> table
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    49
    end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    50
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    51
(* TOKEN: signature revealing the internal structure of a token. This signature
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    52
   TOKEN distinct from the signature {parser name}_TOKENS produced by ML-Yacc.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    53
   The {parser name}_TOKENS structures contain some types and functions to
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    54
    construct tokens from values and positions.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    55
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    56
   The representation of token was very carefully chosen here to allow the
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    57
   polymorphic parser to work without knowing the types of semantic values
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    58
   or line numbers.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    59
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    60
   This has had an impact on the TOKENS structure produced by SML-Yacc, which
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    61
   is a structure parameter to lexer functors.  We would like to have some
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    62
   type 'a token which functions to construct tokens would create.  A
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    63
   constructor function for a integer token might be
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    64
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    65
	  INT: int * 'a * 'a -> 'a token.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    66
 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    67
   This is not possible because we need to have tokens with the representation
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    68
   given below for the polymorphic parser.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    69
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    70
   Thus our constructur functions for tokens have the form:
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    71
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    72
	  INT: int * 'a * 'a -> (svalue,'a) token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    73
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    74
   This in turn has had an impact on the signature that lexers for SML-Yacc
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    75
   must match and the types that a user must declare in the user declarations
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    76
   section of lexers.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    77
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    78
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    79
signature TOKEN =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    80
    sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    81
	structure LrTable : LR_TABLE
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    82
        datatype ('a,'b) token = TOKEN of LrTable.term * ('a * 'b * 'b)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    83
	val sameToken : ('a,'b) token * ('a,'b) token -> bool
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    84
    end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    85
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    86
(* LR_PARSER: signature for a polymorphic LR parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    87
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    88
signature LR_PARSER =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    89
    sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    90
	structure Stream: STREAM
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    91
	structure LrTable : LR_TABLE
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    92
	structure Token : TOKEN
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    93
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    94
	sharing LrTable = Token.LrTable
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    95
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    96
	exception ParseError
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    97
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    98
	val parse : {table : LrTable.table,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    99
		     lexer : ('_b,'_c) Token.token Stream.stream,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   100
		     arg: 'arg,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   101
		     saction : int *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   102
			       '_c *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   103
				(LrTable.state * ('_b * '_c * '_c)) list * 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   104
				'arg ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   105
				     LrTable.nonterm *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   106
				     ('_b * '_c * '_c) *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   107
				     ((LrTable.state *('_b * '_c * '_c)) list),
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   108
		     void : '_b,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   109
		     ec : { is_keyword : LrTable.term -> bool,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   110
			    noShift : LrTable.term -> bool,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   111
			    preferred_change : (LrTable.term list * LrTable.term list) list,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   112
			    errtermvalue : LrTable.term -> '_b,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   113
			    showTerminal : LrTable.term -> string,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   114
			    terms: LrTable.term list,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   115
			    error : string * '_c * '_c -> unit
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   116
			   },
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   117
		     lookahead : int  (* max amount of lookahead used in *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   118
				      (* error correction *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   119
			} -> '_b *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   120
			     (('_b,'_c) Token.token Stream.stream)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   121
    end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   122
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   123
(* LEXER: a signature that most lexers produced for use with SML-Yacc's
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   124
   output will match.  The user is responsible for declaring type token,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   125
   type pos, and type svalue in the UserDeclarations section of a lexer.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   126
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   127
   Note that type token is abstract in the lexer.  This allows SML-Yacc to
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   128
   create a TOKENS signature for use with lexers produced by ML-Lex that
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   129
   treats the type token abstractly.  Lexers that are functors parametrized by
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   130
   a Tokens structure matching a TOKENS signature cannot examine the structure
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   131
   of tokens.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   132
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   133
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   134
signature LEXER =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   135
   sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   136
       structure UserDeclarations :
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   137
	   sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   138
	        type ('a,'b) token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   139
		type pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   140
		type svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   141
	   end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   142
	val makeLexer : (int -> string) -> unit -> 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   143
         (UserDeclarations.svalue,UserDeclarations.pos) UserDeclarations.token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   144
   end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   145
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   146
(* ARG_LEXER: the %arg option of ML-Lex allows users to produce lexers which
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   147
   also take an argument before yielding a function from unit to a token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   148
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   149
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   150
signature ARG_LEXER =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   151
   sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   152
       structure UserDeclarations :
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   153
	   sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   154
	        type ('a,'b) token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   155
		type pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   156
		type svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   157
		type arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   158
	   end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   159
	val makeLexer : (int -> string) -> UserDeclarations.arg -> unit -> 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   160
         (UserDeclarations.svalue,UserDeclarations.pos) UserDeclarations.token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   161
   end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   162
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   163
(* PARSER_DATA: the signature of ParserData structures in {parser name}LrValsFun
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   164
   produced by  SML-Yacc.  All such structures match this signature.  
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   165
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   166
   The {parser name}LrValsFun produces a structure which contains all the values
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   167
   except for the lexer needed to call the polymorphic parser mentioned
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   168
   before.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   169
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   170
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   171
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   172
signature PARSER_DATA =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   173
   sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   174
        (* the type of line numbers *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   175
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   176
	type pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   177
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   178
	(* the type of semantic values *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   179
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   180
	type svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   181
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   182
         (* the type of the user-supplied argument to the parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   183
 	type arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   184
 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   185
	(* the intended type of the result of the parser.  This value is
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   186
	   produced by applying extract from the structure Actions to the
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   187
	   final semantic value resultiing from a parse.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   188
	 *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   189
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   190
	type result
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   191
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   192
	structure LrTable : LR_TABLE
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   193
	structure Token : TOKEN
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   194
	sharing Token.LrTable = LrTable
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   195
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   196
	(* structure Actions contains the functions which mantain the
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   197
	   semantic values stack in the parser.  Void is used to provide
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   198
	   a default value for the semantic stack.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   199
	 *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   200
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   201
	structure Actions : 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   202
	  sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   203
	      val actions : int * pos *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   204
		   (LrTable.state * (svalue * pos * pos)) list * arg->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   205
		         LrTable.nonterm * (svalue * pos * pos) *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   206
			 ((LrTable.state *(svalue * pos * pos)) list)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   207
	      val void : svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   208
	      val extract : svalue -> result
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   209
	  end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   210
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   211
	(* structure EC contains information used to improve error
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   212
	   recovery in an error-correcting parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   213
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   214
	structure EC :
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   215
	   sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   216
	     val is_keyword : LrTable.term -> bool
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   217
	     val noShift : LrTable.term -> bool
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   218
 	     val preferred_change : (LrTable.term list * LrTable.term list) list
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   219
	     val errtermvalue : LrTable.term -> svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   220
	     val showTerminal : LrTable.term -> string
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   221
	     val terms: LrTable.term list
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   222
	   end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   223
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   224
	(* table is the LR table for the parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   225
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   226
	val table : LrTable.table
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   227
    end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   228
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   229
(* signature PARSER is the signature that most user parsers created by 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   230
   SML-Yacc will match.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   231
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   232
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   233
signature PARSER =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   234
    sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   235
        structure Token : TOKEN
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   236
	structure Stream : STREAM
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   237
	exception ParseError
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   238
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   239
	(* type pos is the type of line numbers *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   240
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   241
	type pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   242
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   243
	(* type result is the type of the result from the parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   244
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   245
	type result
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   246
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   247
         (* the type of the user-supplied argument to the parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   248
 	type arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   249
	
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   250
	(* type svalue is the type of semantic values for the semantic value
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   251
	   stack
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   252
	 *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   253
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   254
	type svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   255
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   256
	(* val makeLexer is used to create a stream of tokens for the parser *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   257
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   258
	val makeLexer : (int -> string) ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   259
			 (svalue,pos) Token.token Stream.stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   260
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   261
	(* val parse takes a stream of tokens and a function to print
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   262
	   errors and returns a value of type result and a stream containing
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   263
	   the unused tokens
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   264
	 *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   265
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   266
	val parse : int * ((svalue,pos) Token.token Stream.stream) *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   267
		    (string * pos * pos -> unit) * arg ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   268
				result * (svalue,pos) Token.token Stream.stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   269
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   270
	val sameToken : (svalue,pos) Token.token * (svalue,pos) Token.token ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   271
				bool
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   272
     end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   273
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   274
(* signature ARG_PARSER is the signature that will be matched by parsers whose
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   275
    lexer takes an additional argument.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   276
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   277
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   278
signature ARG_PARSER = 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   279
    sig
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   280
        structure Token : TOKEN
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   281
	structure Stream : STREAM
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   282
	exception ParseError
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   283
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   284
	type arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   285
	type lexarg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   286
	type pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   287
	type result
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   288
	type svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   289
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   290
	val makeLexer : (int -> string) -> lexarg ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   291
			 (svalue,pos) Token.token Stream.stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   292
	val parse : int * ((svalue,pos) Token.token Stream.stream) *
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   293
		    (string * pos * pos -> unit) * arg ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   294
				result * (svalue,pos) Token.token Stream.stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   295
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   296
	val sameToken : (svalue,pos) Token.token * (svalue,pos) Token.token ->
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   297
				bool
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   298
     end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
   299