729 lines
33 KiB
Standard ML
729 lines
33 KiB
Standard ML
(***** GENERATED FILE -- DO NOT EDIT ****)
|
|
functor TracLexFun(structure Tokens: Trac_TOKENS)=
|
|
struct
|
|
structure UserDeclarations =
|
|
struct
|
|
(*
|
|
(C) Copyright Andreas Viktor Hess, DTU, 2020
|
|
(C) Copyright Sebastian A. Mödersheim, DTU, 2020
|
|
(C) Copyright Achim D. Brucker, University of Exeter, 2020
|
|
(C) Copyright Anders Schlichtkrull, DTU, 2020
|
|
|
|
All Rights Reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are
|
|
met:
|
|
|
|
- Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
- Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
- Neither the name of the copyright holder nor the names of its
|
|
contributors may be used to endorse or promote products
|
|
derived from this software without specific prior written
|
|
permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*)
|
|
|
|
structure Tokens = Tokens
|
|
open Trac_Term
|
|
|
|
type pos = int * int * int
|
|
type svalue = Tokens.svalue
|
|
|
|
type ('a,'b) token = ('a,'b) Tokens.token
|
|
type lexresult= (svalue,pos) token
|
|
|
|
|
|
val pos = Unsynchronized.ref (0,0,0)
|
|
|
|
fun eof () = Tokens.EOF((!pos,!pos))
|
|
fun error (e,p : (int * int * int),_) = TextIO.output (TextIO.stdOut,
|
|
String.concat[
|
|
"line ", (Int.toString (#1 p)), "/",
|
|
(Int.toString (#2 p - #3 p)),": ", e, "\n"
|
|
])
|
|
|
|
fun inputPos yypos = ((#1 (!pos), yypos - (#3(!pos)), (#3 (!pos))),
|
|
(#1 (!pos), yypos - (#3(!pos)), (#3 (!pos))))
|
|
fun inputPos_half yypos = (#1 (!pos), yypos - (#3(!pos)), (#3 (!pos)))
|
|
|
|
|
|
|
|
end (* end of user routines *)
|
|
exception LexError (* raised if illegal leaf action tried *)
|
|
structure Internal =
|
|
struct
|
|
|
|
datatype yyfinstate = N of int
|
|
type statedata = {fin : yyfinstate list, trans: string}
|
|
(* transition & final state table *)
|
|
val tab = let
|
|
val s = [
|
|
(0,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(1,
|
|
"\003\003\003\003\003\003\003\003\003\065\067\003\003\003\003\003\
|
|
\\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\
|
|
\\065\003\003\062\003\003\003\058\057\056\054\003\053\003\003\043\
|
|
\\041\041\041\041\041\041\041\041\041\041\040\003\003\038\003\003\
|
|
\\003\025\025\025\025\025\028\025\025\025\025\025\025\025\025\025\
|
|
\\025\025\025\025\025\025\025\025\025\025\025\003\003\003\003\003\
|
|
\\003\019\010\010\010\010\010\010\010\010\010\010\010\010\010\016\
|
|
\\010\010\010\010\010\010\010\011\010\010\004\003\003\003\003\003\
|
|
\\003"
|
|
),
|
|
(4,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\007\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(5,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(6,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(7,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\008\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(8,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\009\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(11,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\012\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(12,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\013\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(13,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\014\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(14,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\015\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(16,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\017\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(17,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\018\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(19,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\020\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(20,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\021\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(21,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\022\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(22,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\023\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(23,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\
|
|
\\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\000\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\005\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\005\
|
|
\\000\005\005\005\005\005\005\005\005\005\005\024\005\005\005\005\
|
|
\\005\005\005\005\005\005\005\005\005\005\005\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(25,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(27,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(28,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\029\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(29,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\030\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(30,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\031\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(31,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\032\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(32,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\033\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(33,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\034\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(34,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\035\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(35,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\036\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(36,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\
|
|
\\026\026\026\026\026\026\026\026\026\026\000\000\000\000\000\000\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\026\026\026\026\026\026\026\000\000\000\000\026\
|
|
\\000\026\026\026\026\026\026\026\026\026\026\026\026\026\026\026\
|
|
\\026\026\026\026\037\026\026\026\026\026\026\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(38,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\039\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(41,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\042\042\042\042\042\042\042\042\042\042\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(43,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\044\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(44,
|
|
"\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\046\045\045\045\045\052\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045"
|
|
),
|
|
(45,
|
|
"\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\046\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045"
|
|
),
|
|
(46,
|
|
"\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047\047\047\047\047\047\047\047\047\047\050\047\047\047\047\049\
|
|
\\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\047\
|
|
\\047"
|
|
),
|
|
(47,
|
|
"\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\046\045\045\045\045\048\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045"
|
|
),
|
|
(48,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\047\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(50,
|
|
"\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\046\045\045\045\045\051\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\045\
|
|
\\045"
|
|
),
|
|
(54,
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\055\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(58,
|
|
"\000\000\000\000\000\000\000\000\000\059\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\059\000\000\000\000\000\000\061\000\000\000\000\000\060\060\060\
|
|
\\059\059\059\059\059\059\059\059\059\059\000\000\000\000\000\000\
|
|
\\000\059\059\059\059\059\059\059\059\059\059\059\059\059\059\059\
|
|
\\059\059\059\059\059\059\059\059\059\059\059\000\000\000\000\059\
|
|
\\000\059\059\059\059\059\059\059\059\059\059\059\059\059\059\059\
|
|
\\059\059\059\059\059\059\059\059\059\059\059\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(60,
|
|
"\000\000\000\000\000\000\000\000\000\060\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\060\000\000\000\000\000\000\061\000\000\000\000\000\060\060\060\
|
|
\\060\060\060\060\060\060\060\060\060\060\000\000\000\000\000\000\
|
|
\\000\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\
|
|
\\060\060\060\060\060\060\060\060\060\060\060\000\000\000\000\060\
|
|
\\000\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\
|
|
\\060\060\060\060\060\060\060\060\060\060\060\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(62,
|
|
"\063\063\063\063\063\063\063\063\063\063\064\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\063\
|
|
\\063"
|
|
),
|
|
(65,
|
|
"\000\000\000\000\000\000\000\000\000\066\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\066\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\\000"
|
|
),
|
|
(0, "")]
|
|
fun f x = x
|
|
val s = List.map f (List.rev (tl (List.rev s)))
|
|
exception LexHackingError
|
|
fun look ((j,x)::r, i: int) = if i = j then x else look(r, i)
|
|
| look ([], i) = raise LexHackingError
|
|
fun g {fin=x, trans=i} = {fin=x, trans=look(s,i)}
|
|
in Vector.fromList(List.map g
|
|
[{fin = [], trans = 0},
|
|
{fin = [], trans = 1},
|
|
{fin = [], trans = 1},
|
|
{fin = [(N 97)], trans = 0},
|
|
{fin = [(N 95),(N 97)], trans = 4},
|
|
{fin = [(N 95)], trans = 5},
|
|
{fin = [(N 95)], trans = 6},
|
|
{fin = [(N 95)], trans = 7},
|
|
{fin = [(N 95)], trans = 8},
|
|
{fin = [(N 62),(N 95)], trans = 5},
|
|
{fin = [(N 95),(N 97)], trans = 5},
|
|
{fin = [(N 95),(N 97)], trans = 11},
|
|
{fin = [(N 95)], trans = 12},
|
|
{fin = [(N 95)], trans = 13},
|
|
{fin = [(N 95)], trans = 14},
|
|
{fin = [(N 39),(N 95)], trans = 5},
|
|
{fin = [(N 95),(N 97)], trans = 16},
|
|
{fin = [(N 95)], trans = 17},
|
|
{fin = [(N 57),(N 95)], trans = 5},
|
|
{fin = [(N 95),(N 97)], trans = 19},
|
|
{fin = [(N 95)], trans = 20},
|
|
{fin = [(N 95)], trans = 21},
|
|
{fin = [(N 95)], trans = 22},
|
|
{fin = [(N 95)], trans = 23},
|
|
{fin = [(N 69),(N 95)], trans = 5},
|
|
{fin = [(N 90),(N 97)], trans = 25},
|
|
{fin = [(N 90)], trans = 25},
|
|
{fin = [(N 90)], trans = 27},
|
|
{fin = [(N 90),(N 97)], trans = 28},
|
|
{fin = [(N 90)], trans = 29},
|
|
{fin = [(N 90)], trans = 30},
|
|
{fin = [(N 90)], trans = 31},
|
|
{fin = [(N 90)], trans = 32},
|
|
{fin = [(N 90)], trans = 33},
|
|
{fin = [(N 90)], trans = 34},
|
|
{fin = [(N 90)], trans = 35},
|
|
{fin = [(N 90)], trans = 36},
|
|
{fin = [(N 33),(N 90)], trans = 25},
|
|
{fin = [(N 97)], trans = 38},
|
|
{fin = [(N 53)], trans = 0},
|
|
{fin = [(N 41),(N 97)], trans = 0},
|
|
{fin = [(N 72),(N 97)], trans = 41},
|
|
{fin = [(N 72)], trans = 41},
|
|
{fin = [(N 97)], trans = 43},
|
|
{fin = [], trans = 44},
|
|
{fin = [], trans = 45},
|
|
{fin = [], trans = 46},
|
|
{fin = [], trans = 47},
|
|
{fin = [], trans = 48},
|
|
{fin = [(N 20)], trans = 0},
|
|
{fin = [], trans = 50},
|
|
{fin = [(N 20)], trans = 48},
|
|
{fin = [], trans = 44},
|
|
{fin = [(N 22),(N 97)], trans = 0},
|
|
{fin = [(N 50),(N 97)], trans = 54},
|
|
{fin = [(N 48)], trans = 0},
|
|
{fin = [(N 45),(N 97)], trans = 0},
|
|
{fin = [(N 43),(N 97)], trans = 0},
|
|
{fin = [(N 97)], trans = 58},
|
|
{fin = [], trans = 58},
|
|
{fin = [], trans = 60},
|
|
{fin = [(N 85)], trans = 0},
|
|
{fin = [(N 97)], trans = 62},
|
|
{fin = [], trans = 62},
|
|
{fin = [(N 8)], trans = 0},
|
|
{fin = [(N 4),(N 97)], trans = 65},
|
|
{fin = [(N 4)], trans = 65},
|
|
{fin = [(N 1)], trans = 0}])
|
|
end
|
|
structure StartStates =
|
|
struct
|
|
datatype yystartstate = STARTSTATE of int
|
|
|
|
(* start state definitions *)
|
|
|
|
val INITIAL = STARTSTATE 1;
|
|
|
|
end
|
|
type result = UserDeclarations.lexresult
|
|
exception LexerError (* raised if illegal leaf action tried *)
|
|
end
|
|
|
|
fun makeLexer yyinput =
|
|
let val yygone0=1
|
|
val yyb = Unsynchronized.ref "\n" (* buffer *)
|
|
val yybl = Unsynchronized.ref 1 (*buffer length *)
|
|
val yybufpos = Unsynchronized.ref 1 (* location of next character to use *)
|
|
val yygone = Unsynchronized.ref yygone0 (* position in file of beginning of buffer *)
|
|
val yydone = Unsynchronized.ref false (* eof found yet? *)
|
|
val yybegin = Unsynchronized.ref 1 (*Current 'start state' for lexer *)
|
|
|
|
val YYBEGIN = fn (Internal.StartStates.STARTSTATE x) =>
|
|
yybegin := x
|
|
|
|
fun lex () : Internal.result =
|
|
let fun continue() = lex() in
|
|
let fun scan (s,AcceptingLeaves : Internal.yyfinstate list list,l,i0) =
|
|
let fun action (i,nil) = raise LexError
|
|
| action (i,nil::l) = action (i-1,l)
|
|
| action (i,(node::acts)::l) =
|
|
case node of
|
|
Internal.N yyk =>
|
|
(let fun yymktext() = String.substring(!yyb,i0,i-i0)
|
|
val yypos = i0+ !yygone
|
|
open UserDeclarations Internal.StartStates
|
|
in (yybufpos := i; case yyk of
|
|
|
|
(* Application actions *)
|
|
|
|
1 => (pos := ((#1 (!pos)) + 1, yypos - (#3(!pos)),yypos ); lex())
|
|
| 20 => (lex())
|
|
| 22 => let val yytext=yymktext() in Tokens.COMMA(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 33 => let val yytext=yymktext() in Tokens.FIXEDPOINT(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 39 => let val yytext=yymktext() in Tokens.WHERE(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 4 => (pos := (#1 (!pos), yypos - (#3(!pos)), (#3 (!pos))); lex())
|
|
| 41 => let val yytext=yymktext() in Tokens.COLON(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 43 => let val yytext=yymktext() in Tokens.PAREN_OPEN(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 45 => let val yytext=yymktext() in Tokens.PAREN_CLOSE(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 48 => let val yytext=yymktext() in Tokens.DOUBLE_ASTERISK(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 50 => let val yytext=yymktext() in Tokens.ASTERISK(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 53 => let val yytext=yymktext() in Tokens.DOUBLE_RARROW(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 57 => let val yytext=yymktext() in Tokens.ONE(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 62 => let val yytext=yymktext() in Tokens.ZERO(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 69 => let val yytext=yymktext() in Tokens.ATTACK(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 72 => let val yytext=yymktext() in Tokens.INTEGER_LITERAL(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 8 => (pos := ((#1 (!pos)) + 1, yypos - (#3(!pos)),yypos ); lex())
|
|
| 85 => let val yytext=yymktext() in Tokens.STRING_LITERAL(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 90 => let val yytext=yymktext() in Tokens.UPPER_STRING_LITERAL(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 95 => let val yytext=yymktext() in Tokens.LOWER_STRING_LITERAL(yytext,inputPos_half yypos,inputPos_half yypos) end
|
|
| 97 => let val yytext=yymktext() in error ("ignoring bad character "^yytext,
|
|
((#1 (!pos), yypos - (#3(!pos)), (#3 (!pos)))),
|
|
((#1 (!pos), yypos - (#3(!pos)), (#3 (!pos)))));
|
|
lex() end
|
|
| _ => raise Internal.LexerError
|
|
|
|
) end )
|
|
|
|
val {fin,trans} = Vector.sub(Internal.tab, s)
|
|
val NewAcceptingLeaves = fin::AcceptingLeaves
|
|
in if l = !yybl then
|
|
if trans = #trans(Vector.sub(Internal.tab,0))
|
|
then action(l,NewAcceptingLeaves
|
|
) else let val newchars= if !yydone then "" else yyinput 1024
|
|
in if (String.size newchars)=0
|
|
then (yydone := true;
|
|
if (l=i0) then UserDeclarations.eof ()
|
|
else action(l,NewAcceptingLeaves))
|
|
else (if i0=l then yyb := newchars
|
|
else yyb := String.substring(!yyb,i0,l-i0)^newchars;
|
|
yygone := !yygone+i0;
|
|
yybl := String.size (!yyb);
|
|
scan (s,AcceptingLeaves,l-i0,0))
|
|
end
|
|
else let val NewChar = Char.ord(CharVector.sub(!yyb,l))
|
|
val NewChar = if NewChar<128 then NewChar else 128
|
|
val NewState = Char.ord(CharVector.sub(trans,NewChar))
|
|
in if NewState=0 then action(l,NewAcceptingLeaves)
|
|
else scan(NewState,NewAcceptingLeaves,l+1,i0)
|
|
end
|
|
end
|
|
(*
|
|
val start= if String.substring(!yyb,!yybufpos-1,1)="\n"
|
|
then !yybegin+1 else !yybegin
|
|
*)
|
|
in scan(!yybegin (* start *),nil,!yybufpos,!yybufpos)
|
|
end
|
|
end
|
|
in lex
|
|
end
|
|
end
|