(* Lexer for spi-calculus-like processes. Copyright (C) 2004 Jean Goubault-Larrecq and LSV, CNRS UMR 8643 & ENS Cachan and INRIA Futurs projet SECSI. This file is part of ispi. ispi is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ispi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ispi; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. *) open "spi_h"; val spi_value = ref (spinone ()); fun id_or_var yyd = let val s = hlex_text yyd in spi_value := string s; if is_fun s then identifier else VAR end; local val return = SOME; val continue = NONE; val yyterminate = (fn _ => SOME 0 (* end of file reached *)); infix 0 hlex_then; fun f hlex_then g = fn yyd => (f yyd; g yyd); val INITIAL = 0; val COMMENT = 1; val yy_end_of_buffer=43; val action_0 = fn _ => continue; val yy_accept = (* 97 entries *) [ 0, 0, 0, 3, 3, 43, 41, 1, 1, 19, 6, 7, 12, 14, 41, 39, 13, 41, 16, 40, 8, 9, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 10, 30, 11, 3, 4, 1, 2, 15, 39, 17, 18, 40, 40, 0, 38, 38, 38, 38, 38, 38, 38, 38, 22, 26, 38, 38, 23, 38, 38, 38, 38, 3, 4, 5, 4, 36, 38, 38, 38, 38, 34, 28, 21, 27, 38, 38, 38, 38, 29, 33, 25, 38, 38, 32, 20, 24, 31, 38, 38, 35, 0 ]; val yy_ec = (* 256 entries *) [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, 1, 1, 1, 5, 6, 7, 8, 1, 9, 1, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 13, 14, 15, 16, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 1, 19, 1, 20, 1, 21, 22, 23, 24, 25, 26, 22, 27, 28, 22, 22, 29, 22, 30, 31, 32, 22, 33, 34, 35, 36, 37, 38, 22, 22, 22, 39, 40, 41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; val yy_meta = (* 42 entries *) [ 0, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1 ]; val yy_base = (* 103 entries *) [ 0, 0, 0, 117, 116, 123, 126, 40, 42, 126, 114, 126, 126, 126, 109, 108, 126, 103, 102, 0, 126, 126, 34, 87, 0, 95, 94, 18, 78, 22, 88, 87, 23, 78, 75, 82, 126, 126, 126, 0, 49, 58, 126, 96, 95, 126, 126, 0, 0, 46, 0, 0, 82, 71, 69, 69, 77, 71, 0, 0, 65, 61, 0, 63, 22, 66, 71, 0, 57, 126, 60, 0, 70, 73, 68, 62, 0, 0, 0, 0, 54, 67, 57, 58, 0, 0, 0, 52, 60, 0, 0, 0, 0, 42, 49, 0, 126, 68, 71, 58, 74, 78, 82 ]; val yy_def = (* 103 entries *) [ 0, 96, 1, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 96, 96, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 96, 96, 96, 101, 102, 96, 96, 96, 96, 96, 96, 98, 98, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 102, 96, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 96, 96, 96, 96, 96, 96 ]; val yy_nxt = (* 168 entries *) [ 0, 6, 7, 8, 9, 6, 10, 11, 6, 12, 13, 14, 15, 16, 17, 18, 6, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 24, 29, 30, 31, 32, 33, 24, 34, 35, 24, 24, 24, 36, 37, 38, 41, 41, 41, 41, 44, 55, 58, 62, 80, 48, 59, 81, 49, 56, 69, 70, 44, 63, 41, 41, 50, 48, 96, 96, 49, 69, 70, 39, 39, 39, 39, 47, 95, 47, 51, 94, 51, 67, 67, 93, 67, 68, 68, 68, 68, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 79, 78, 77, 76, 75, 74, 73, 72, 71, 44, 43, 66, 65, 64, 61, 60, 57, 54, 53, 52, 46, 45, 44, 43, 42, 96, 40, 40, 5, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 ]; val yy_chk = (* 168 entries *) [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 8, 8, 22, 27, 29, 32, 64, 22, 29, 64, 22, 27, 40, 40, 49, 32, 41, 41, 99, 49, 68, 68, 49, 70, 70, 97, 97, 97, 97, 98, 94, 98, 100, 93, 100, 101, 101, 88, 101, 102, 102, 102, 102, 87, 83, 82, 81, 80, 75, 74, 73, 72, 66, 65, 63, 61, 60, 57, 56, 55, 54, 53, 52, 44, 43, 35, 34, 33, 31, 30, 28, 26, 25, 23, 18, 17, 15, 14, 10, 5, 4, 3, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 ]; val yy_NUL_trans = nil; val action_1 = (fn yyd => ( continue )); val action_2 = (fn yyd => ( ( hlex_begin (yyd, COMMENT); continue ) )); val action_3 = (fn yyd => ( ( continue (* eat anything that's not a '*' *) ) )); val action_4 = (fn yyd => ( ( continue (* eat up '*'s not followed by ')'s *) ) )); val action_5 = (fn yyd => ( ( hlex_begin (yyd, INITIAL); continue ) )); val action_45 = (fn yyd => ( ( hlex_begin (yyd, 0); hlex_flush (yyd, hlex_current_buffer yyd); raise SpiUnterminatedCommentEvt ) )); val action_6 = (fn yyd => ( return kw_open_paren )); val action_7 = (fn yyd => ( return kw_close_paren )); val action_8 = (fn yyd => ( return kw_open_bracket )); val action_9 = (fn yyd => ( return kw_close_bracket )); val action_10 = (fn yyd => ( return kw_open_curly )); val action_11 = (fn yyd => ( return kw_close_curly )); val action_12 = (fn yyd => ( return kw_comma )); val action_13 = (fn yyd => ( return kw_semicolon )); val action_14 = (fn yyd => ( return kw_period )); val action_15 = (fn yyd => ( ( spi_value := string (hlex_text yyd); return kw_slash ) )); val action_16 = (fn yyd => ( return kw_equal )); val action_17 = (fn yyd => ( return kw_different )); val action_18 = (fn yyd => ( return kw_implies )); val action_19 = (fn yyd => ( return kw_bang )); val action_20 = (fn yyd => ( return kw_zero )); val action_21 = (fn yyd => ( return kw_new )); val action_22 = (fn yyd => ( return kw_if )); val action_23 = (fn yyd => ( return kw_of )); val action_24 = (fn yyd => ( return kw_then )); val action_25 = (fn yyd => ( return kw_else )); val action_26 = (fn yyd => ( return kw_in )); val action_27 = (fn yyd => ( return kw_out )); val action_28 = (fn yyd => ( return kw_let )); val action_29 = (fn yyd => ( return kw_case )); val action_30 = (fn yyd => ( return kw_par )); val action_31 = (fn yyd => ( return kw_event )); val action_32 = (fn yyd => ( return kw_proc )); val action_33 = (fn yyd => ( return kw_data )); val action_34 = (fn yyd => ( return kw_fun )); val action_35 = (fn yyd => ( return kw_private )); val action_36 = (fn yyd => ( return kw_and )); val action_37 = (fn yyd => ( return kw_any )); val action_38 = (fn yyd => ( ( return (id_or_var yyd) ) )); val action_39 = (fn yyd => ( ( return (id_or_var yyd) ) )); val action_40 = (fn yyd => ( ( return (id_or_var yyd) ) )); val action_41 = (fn yyd => ( ( #put stderr "Unrecognized character: "; #put stderr (hlex_text yyd); #put stderr "\n"; #flush stderr (); continue ) )); val action_42 = (fn yyd => ( raise Hlex 8 (* hlex scanner jammed *) )); val action = [ action_0, action_1, action_2, action_3, action_4, action_5, action_6, action_7, action_8, action_9, action_10, action_11, action_12, action_13, action_14, action_15, action_16, action_17, action_18, action_19, action_20, action_21, action_22, action_23, action_24, action_25, action_26, action_27, action_28, action_29, action_30, action_31, action_32, action_33, action_34, action_35, action_36, action_37, action_38, action_39, action_40, action_41, action_42, action_0, yyterminate, action_45] val yytables = hlex_tables (action, 42, yy_end_of_buffer, yy_accept, yy_ec, yy_meta, yy_base, yy_def, yy_nxt, yy_chk, yy_NUL_trans, 126, 96, 1) in val spilex = hlex yytables end;