⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 join.sml

📁 这是我们参加06年全国开源软件的竞赛作品
💻 SML
字号:
(* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi  * * $Log: join.sml,v $ * Revision 1.1.1.1  1999/12/03 19:59:22  dbm * Import of 110.0.6 src * * Revision 1.1.1.1  1997/01/14 01:38:04  george *   Version 109.24 * * Revision 1.1.1.1  1996/01/31  16:01:42  george * Version 109 *  *)(* functor Join creates a user parser by putting together a Lexer structure,   an LrValues structure, and a polymorphic parser structure.  Note that   the Lexer and LrValues structure must share the type pos (i.e. the type   of line numbers), the type svalues for semantic values, and the type   of tokens.*)functor Join(structure Lex : LEXER	     structure ParserData: PARSER_DATA	     structure LrParser : LR_PARSER	     sharing ParserData.LrTable = LrParser.LrTable	     sharing ParserData.Token = LrParser.Token	     sharing type Lex.UserDeclarations.svalue = ParserData.svalue	     sharing type Lex.UserDeclarations.pos = ParserData.pos	     sharing type Lex.UserDeclarations.token = ParserData.Token.token)		 : PARSER =struct    structure Token = ParserData.Token    structure Stream = LrParser.Stream     exception ParseError = LrParser.ParseError    type arg = ParserData.arg    type pos = ParserData.pos    type result = ParserData.result    type svalue = ParserData.svalue    val makeLexer = LrParser.Stream.streamify o Lex.makeLexer    val parse = fn (lookahead,lexer,error,arg) =>	(fn (a,b) => (ParserData.Actions.extract a,b))     (LrParser.parse {table = ParserData.table,	        lexer=lexer,		lookahead=lookahead,		saction = ParserData.Actions.actions,		arg=arg,		void= ParserData.Actions.void,	        ec = {is_keyword = ParserData.EC.is_keyword,		      noShift = ParserData.EC.noShift,		      preferred_change = ParserData.EC.preferred_change,		      errtermvalue = ParserData.EC.errtermvalue,		      error=error,		      showTerminal = ParserData.EC.showTerminal,		      terms = ParserData.EC.terms}}      )     val sameToken = Token.sameTokenend(* functor JoinWithArg creates a variant of the parser structure produced    above.  In this case, the makeLexer take an additional argument before   yielding a value of type unit -> (svalue,pos) token *)functor JoinWithArg(structure Lex : ARG_LEXER	     structure ParserData: PARSER_DATA	     structure LrParser : LR_PARSER	     sharing ParserData.LrTable = LrParser.LrTable	     sharing ParserData.Token = LrParser.Token	     sharing type Lex.UserDeclarations.svalue = ParserData.svalue	     sharing type Lex.UserDeclarations.pos = ParserData.pos	     sharing type Lex.UserDeclarations.token = ParserData.Token.token)		 : ARG_PARSER  =struct    structure Token = ParserData.Token    structure Stream = LrParser.Stream    exception ParseError = LrParser.ParseError    type arg = ParserData.arg    type lexarg = Lex.UserDeclarations.arg    type pos = ParserData.pos    type result = ParserData.result    type svalue = ParserData.svalue    val makeLexer = fn s => fn arg =>		 LrParser.Stream.streamify (Lex.makeLexer s arg)    val parse = fn (lookahead,lexer,error,arg) =>	(fn (a,b) => (ParserData.Actions.extract a,b))     (LrParser.parse {table = ParserData.table,	        lexer=lexer,		lookahead=lookahead,		saction = ParserData.Actions.actions,		arg=arg,		void= ParserData.Actions.void,	        ec = {is_keyword = ParserData.EC.is_keyword,		      noShift = ParserData.EC.noShift,		      preferred_change = ParserData.EC.preferred_change,		      errtermvalue = ParserData.EC.errtermvalue,		      error=error,		      showTerminal = ParserData.EC.showTerminal,		      terms = ParserData.EC.terms}}      )    val sameToken = Token.sameTokenend;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -