Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/ml-yacc/lib/join.sml
ViewVC logotype

Annotation of /sml/trunk/src/ml-yacc/lib/join.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 651 - (view) (download)

1 : monnier 249 (* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi
2 :     *
3 :     * $Log$
4 : monnier 651 * Revision 1.2 2000/06/01 18:33:44 monnier
5 :     * bring revisions from the vendor branch to the trunk
6 :     *
7 : monnier 249 * Revision 1.1.1.10 1999/04/17 18:56:10 monnier
8 :     * version 110.16
9 :     *
10 :     * Revision 1.1.1.1 1997/01/14 01:38:04 george
11 :     * Version 109.24
12 :     *
13 :     * Revision 1.1.1.1 1996/01/31 16:01:42 george
14 :     * Version 109
15 :     *
16 :     *)
17 :    
18 :     (* functor Join creates a user parser by putting together a Lexer structure,
19 :     an LrValues structure, and a polymorphic parser structure. Note that
20 :     the Lexer and LrValues structure must share the type pos (i.e. the type
21 :     of line numbers), the type svalues for semantic values, and the type
22 :     of tokens.
23 :     *)
24 :    
25 :     functor Join(structure Lex : LEXER
26 :     structure ParserData: PARSER_DATA
27 :     structure LrParser : LR_PARSER
28 :     sharing ParserData.LrTable = LrParser.LrTable
29 :     sharing ParserData.Token = LrParser.Token
30 :     sharing type Lex.UserDeclarations.svalue = ParserData.svalue
31 :     sharing type Lex.UserDeclarations.pos = ParserData.pos
32 :     sharing type Lex.UserDeclarations.token = ParserData.Token.token)
33 :     : PARSER =
34 :     struct
35 :     structure Token = ParserData.Token
36 :     structure Stream = LrParser.Stream
37 :    
38 :     exception ParseError = LrParser.ParseError
39 :    
40 :     type arg = ParserData.arg
41 :     type pos = ParserData.pos
42 :     type result = ParserData.result
43 :     type svalue = ParserData.svalue
44 :     val makeLexer = LrParser.Stream.streamify o Lex.makeLexer
45 :     val parse = fn (lookahead,lexer,error,arg) =>
46 :     (fn (a,b) => (ParserData.Actions.extract a,b))
47 :     (LrParser.parse {table = ParserData.table,
48 :     lexer=lexer,
49 :     lookahead=lookahead,
50 :     saction = ParserData.Actions.actions,
51 :     arg=arg,
52 :     void= ParserData.Actions.void,
53 :     ec = {is_keyword = ParserData.EC.is_keyword,
54 :     noShift = ParserData.EC.noShift,
55 :     preferred_change = ParserData.EC.preferred_change,
56 :     errtermvalue = ParserData.EC.errtermvalue,
57 :     error=error,
58 :     showTerminal = ParserData.EC.showTerminal,
59 :     terms = ParserData.EC.terms}}
60 :     )
61 :     val sameToken = Token.sameToken
62 :     end
63 :    
64 :     (* functor JoinWithArg creates a variant of the parser structure produced
65 :     above. In this case, the makeLexer take an additional argument before
66 :     yielding a value of type unit -> (svalue,pos) token
67 :     *)
68 :    
69 :     functor JoinWithArg(structure Lex : ARG_LEXER
70 :     structure ParserData: PARSER_DATA
71 :     structure LrParser : LR_PARSER
72 :     sharing ParserData.LrTable = LrParser.LrTable
73 :     sharing ParserData.Token = LrParser.Token
74 :     sharing type Lex.UserDeclarations.svalue = ParserData.svalue
75 :     sharing type Lex.UserDeclarations.pos = ParserData.pos
76 :     sharing type Lex.UserDeclarations.token = ParserData.Token.token)
77 :     : ARG_PARSER =
78 :     struct
79 :     structure Token = ParserData.Token
80 :     structure Stream = LrParser.Stream
81 :    
82 :     exception ParseError = LrParser.ParseError
83 :    
84 :     type arg = ParserData.arg
85 :     type lexarg = Lex.UserDeclarations.arg
86 :     type pos = ParserData.pos
87 :     type result = ParserData.result
88 :     type svalue = ParserData.svalue
89 :    
90 :     val makeLexer = fn s => fn arg =>
91 :     LrParser.Stream.streamify (Lex.makeLexer s arg)
92 :     val parse = fn (lookahead,lexer,error,arg) =>
93 :     (fn (a,b) => (ParserData.Actions.extract a,b))
94 :     (LrParser.parse {table = ParserData.table,
95 :     lexer=lexer,
96 :     lookahead=lookahead,
97 :     saction = ParserData.Actions.actions,
98 :     arg=arg,
99 :     void= ParserData.Actions.void,
100 :     ec = {is_keyword = ParserData.EC.is_keyword,
101 :     noShift = ParserData.EC.noShift,
102 :     preferred_change = ParserData.EC.preferred_change,
103 :     errtermvalue = ParserData.EC.errtermvalue,
104 :     error=error,
105 :     showTerminal = ParserData.EC.showTerminal,
106 :     terms = ParserData.EC.terms}}
107 :     )
108 :     val sameToken = Token.sameToken
109 :     end;

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0