src/HOL/TPTP/TPTP_Parser/ml-yacc/lib/join.sml
author wenzelm
Wed, 04 Oct 2017 12:00:53 +0200
changeset 66787 64b47495676d
parent 46845 6431a93ffeb6
permissions -rw-r--r--
obsolete;
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
(* functor Join creates a user parser by putting together a Lexer structure,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     4
   an LrValues structure, and a polymorphic parser structure.  Note that
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     5
   the Lexer and LrValues structure must share the type pos (i.e. the type
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     6
   of line numbers), the type svalues for semantic values, and the type
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     7
   of tokens.
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     8
*)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
     9
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    10
functor Join(structure Lex : LEXER
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    11
	     structure ParserData: PARSER_DATA
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    12
	     structure LrParser : LR_PARSER
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    13
	     sharing ParserData.LrTable = LrParser.LrTable
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    14
	     sharing ParserData.Token = LrParser.Token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    15
	     sharing type Lex.UserDeclarations.svalue = ParserData.svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    16
	     sharing type Lex.UserDeclarations.pos = ParserData.pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    17
	     sharing type Lex.UserDeclarations.token = ParserData.Token.token)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    18
		 : PARSER =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    19
struct
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    20
    structure Token = ParserData.Token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    21
    structure Stream = LrParser.Stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    22
 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    23
    exception ParseError = LrParser.ParseError
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    24
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    25
    type arg = ParserData.arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    26
    type pos = ParserData.pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    27
    type result = ParserData.result
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    28
    type svalue = ParserData.svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    29
    val makeLexer = LrParser.Stream.streamify o Lex.makeLexer
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    30
    val parse = fn (lookahead,lexer,error,arg) =>
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    31
	(fn (a,b) => (ParserData.Actions.extract a,b))
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    32
     (LrParser.parse {table = ParserData.table,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    33
	        lexer=lexer,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    34
		lookahead=lookahead,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    35
		saction = ParserData.Actions.actions,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    36
		arg=arg,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    37
		void= ParserData.Actions.void,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    38
	        ec = {is_keyword = ParserData.EC.is_keyword,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    39
		      noShift = ParserData.EC.noShift,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    40
		      preferred_change = ParserData.EC.preferred_change,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    41
		      errtermvalue = ParserData.EC.errtermvalue,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    42
		      error=error,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    43
		      showTerminal = ParserData.EC.showTerminal,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    44
		      terms = ParserData.EC.terms}}
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    45
      )
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    46
     val sameToken = Token.sameToken
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    47
end
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    48
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    49
(* functor JoinWithArg creates a variant of the parser structure produced 
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    50
   above.  In this case, the makeLexer take an additional argument before
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    51
   yielding a value of type unit -> (svalue,pos) token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    52
 *)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    53
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    54
functor JoinWithArg(structure Lex : ARG_LEXER
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    55
	     structure ParserData: PARSER_DATA
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    56
	     structure LrParser : LR_PARSER
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    57
	     sharing ParserData.LrTable = LrParser.LrTable
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    58
	     sharing ParserData.Token = LrParser.Token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    59
	     sharing type Lex.UserDeclarations.svalue = ParserData.svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    60
	     sharing type Lex.UserDeclarations.pos = ParserData.pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    61
	     sharing type Lex.UserDeclarations.token = ParserData.Token.token)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    62
		 : ARG_PARSER  =
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    63
struct
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    64
    structure Token = ParserData.Token
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    65
    structure Stream = LrParser.Stream
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    66
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    67
    exception ParseError = LrParser.ParseError
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    68
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    69
    type arg = ParserData.arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    70
    type lexarg = Lex.UserDeclarations.arg
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    71
    type pos = ParserData.pos
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    72
    type result = ParserData.result
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    73
    type svalue = ParserData.svalue
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    74
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    75
    val makeLexer = fn s => fn arg =>
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    76
		 LrParser.Stream.streamify (Lex.makeLexer s arg)
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    77
    val parse = fn (lookahead,lexer,error,arg) =>
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    78
	(fn (a,b) => (ParserData.Actions.extract a,b))
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    79
     (LrParser.parse {table = ParserData.table,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    80
	        lexer=lexer,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    81
		lookahead=lookahead,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    82
		saction = ParserData.Actions.actions,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    83
		arg=arg,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    84
		void= ParserData.Actions.void,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    85
	        ec = {is_keyword = ParserData.EC.is_keyword,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    86
		      noShift = ParserData.EC.noShift,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    87
		      preferred_change = ParserData.EC.preferred_change,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    88
		      errtermvalue = ParserData.EC.errtermvalue,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    89
		      error=error,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    90
		      showTerminal = ParserData.EC.showTerminal,
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    91
		      terms = ParserData.EC.terms}}
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    92
      )
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    93
    val sameToken = Token.sameToken
6431a93ffeb6 added ml-yacc library sources;
sultana
parents:
diff changeset
    94
end;