parsing warning removed.
This commit is contained in:
parent
7c0c2e0415
commit
88732ef2a9
|
@ -45,21 +45,17 @@ List.iter (fun (str,tok) -> Hashtbl.add keyword_table str tok) [
|
||||||
"state", STATE;
|
"state", STATE;
|
||||||
"unless", UNLESS;
|
"unless", UNLESS;
|
||||||
"until", UNTIL;
|
"until", UNTIL;
|
||||||
"emit", EMIT;
|
|
||||||
"last", LAST;
|
"last", LAST;
|
||||||
"if", IF;
|
"if", IF;
|
||||||
"then", THEN;
|
"then", THEN;
|
||||||
"else", ELSE;
|
"else", ELSE;
|
||||||
"default", DEFAULT;
|
"default", DEFAULT;
|
||||||
"continue", CONTINUE;
|
"continue", CONTINUE;
|
||||||
"case", CASE;
|
|
||||||
"do", DO;
|
"do", DO;
|
||||||
"contract", CONTRACT;
|
"contract", CONTRACT;
|
||||||
"assume", ASSUME;
|
"assume", ASSUME;
|
||||||
"enforce", ENFORCE;
|
"enforce", ENFORCE;
|
||||||
"with", WITH;
|
"with", WITH;
|
||||||
"inlined", INLINED;
|
|
||||||
"with", WITH;
|
|
||||||
"map", MAP;
|
"map", MAP;
|
||||||
"fold", FOLD;
|
"fold", FOLD;
|
||||||
"mapfold", MAPFOLD;
|
"mapfold", MAPFOLD;
|
||||||
|
@ -170,22 +166,6 @@ rule token = parse
|
||||||
{ INT (int_of_string(Lexing.lexeme lexbuf)) }
|
{ INT (int_of_string(Lexing.lexeme lexbuf)) }
|
||||||
| ['0'-'9']+ ('.' ['0'-'9']*)? (['e' 'E'] ['+' '-']? ['0'-'9']+)?
|
| ['0'-'9']+ ('.' ['0'-'9']*)? (['e' 'E'] ['+' '-']? ['0'-'9']+)?
|
||||||
{ FLOAT (float_of_string(Lexing.lexeme lexbuf)) }
|
{ FLOAT (float_of_string(Lexing.lexeme lexbuf)) }
|
||||||
| "\""
|
|
||||||
{ reset_string_buffer();
|
|
||||||
let string_start = lexbuf.lex_start_pos + lexbuf.lex_abs_pos in
|
|
||||||
begin try
|
|
||||||
string lexbuf
|
|
||||||
with Lexical_error(Unterminated_string, _, string_end) ->
|
|
||||||
raise(Lexical_error(Unterminated_string, string_start, string_end))
|
|
||||||
end;
|
|
||||||
lexbuf.lex_start_pos <- string_start - lexbuf.lex_abs_pos;
|
|
||||||
STRING (get_stored_string()) }
|
|
||||||
| "'" [^ '\\' '\''] "'"
|
|
||||||
{ CHAR(Lexing.lexeme_char lexbuf 1) }
|
|
||||||
| "'" '\\' ['\\' '\'' 'n' 't' 'b' 'r'] "'"
|
|
||||||
{ CHAR(char_for_backslash (Lexing.lexeme_char lexbuf 2)) }
|
|
||||||
| "'" '\\' ['0'-'9'] ['0'-'9'] ['0'-'9'] "'"
|
|
||||||
{ CHAR(char_for_decimal_code lexbuf 2) }
|
|
||||||
| "(*@ " (['A'-'Z' 'a'-'z']('_' ? ['A'-'Z' 'a'-'z' ''' '0'-'9']) * as id)
|
| "(*@ " (['A'-'Z' 'a'-'z']('_' ? ['A'-'Z' 'a'-'z' ''' '0'-'9']) * as id)
|
||||||
{
|
{
|
||||||
reset_string_buffer();
|
reset_string_buffer();
|
||||||
|
|
|
@ -15,10 +15,8 @@ open Parsetree
|
||||||
%token <int> INT
|
%token <int> INT
|
||||||
%token <float> FLOAT
|
%token <float> FLOAT
|
||||||
%token <bool> BOOL
|
%token <bool> BOOL
|
||||||
%token <char> CHAR
|
|
||||||
%token <string> STRING
|
|
||||||
%token <string * string> PRAGMA
|
%token <string * string> PRAGMA
|
||||||
%token TYPE FUN NODE RETURNS VAR VAL IN OPEN END CONST
|
%token TYPE FUN NODE RETURNS VAR VAL OPEN END CONST
|
||||||
%token FBY PRE SWITCH WHEN EVERY
|
%token FBY PRE SWITCH WHEN EVERY
|
||||||
%token OR STAR NOT
|
%token OR STAR NOT
|
||||||
%token AMPERSAND
|
%token AMPERSAND
|
||||||
|
@ -29,7 +27,6 @@ open Parsetree
|
||||||
%token STATE
|
%token STATE
|
||||||
%token UNLESS
|
%token UNLESS
|
||||||
%token UNTIL
|
%token UNTIL
|
||||||
%token EMIT
|
|
||||||
%token LAST
|
%token LAST
|
||||||
%token IF
|
%token IF
|
||||||
%token THEN
|
%token THEN
|
||||||
|
@ -37,12 +34,10 @@ open Parsetree
|
||||||
%token DEFAULT
|
%token DEFAULT
|
||||||
%token DO
|
%token DO
|
||||||
%token CONTINUE
|
%token CONTINUE
|
||||||
%token CASE
|
|
||||||
%token CONTRACT
|
%token CONTRACT
|
||||||
%token ASSUME
|
%token ASSUME
|
||||||
%token ENFORCE
|
%token ENFORCE
|
||||||
%token WITH
|
%token WITH
|
||||||
%token INLINED
|
|
||||||
%token POWER
|
%token POWER
|
||||||
%token LBRACKET
|
%token LBRACKET
|
||||||
%token RBRACKET
|
%token RBRACKET
|
||||||
|
@ -63,9 +58,8 @@ open Parsetree
|
||||||
%left WITH
|
%left WITH
|
||||||
%nonassoc prec_ident
|
%nonassoc prec_ident
|
||||||
%nonassoc LBRACKET
|
%nonassoc LBRACKET
|
||||||
%left IF ELSE
|
%left ELSE
|
||||||
%right ARROW
|
%right ARROW
|
||||||
%nonassoc EVERY
|
|
||||||
%left OR
|
%left OR
|
||||||
%left AMPERSAND
|
%left AMPERSAND
|
||||||
%left INFIX0 EQUAL
|
%left INFIX0 EQUAL
|
||||||
|
@ -77,8 +71,6 @@ open Parsetree
|
||||||
%right prec_uminus
|
%right prec_uminus
|
||||||
%right FBY
|
%right FBY
|
||||||
%right PRE
|
%right PRE
|
||||||
%right LAST
|
|
||||||
%right prec_apply
|
|
||||||
%left POWER
|
%left POWER
|
||||||
%right PREFIX
|
%right PREFIX
|
||||||
%left DOT
|
%left DOT
|
||||||
|
@ -413,7 +405,7 @@ exp:
|
||||||
{ mk_exp (Eapp(mk_app Efby, [$1; $3])) }
|
{ mk_exp (Eapp(mk_app Efby, [$1; $3])) }
|
||||||
| PRE exp
|
| PRE exp
|
||||||
{ mk_exp (Eapp(mk_app (Epre None), [$2])) }
|
{ mk_exp (Eapp(mk_app (Epre None), [$2])) }
|
||||||
| node_name LPAREN exps RPAREN %prec prec_apply
|
| node_name LPAREN exps RPAREN
|
||||||
{ mk_exp (mk_call $1 $3) }
|
{ mk_exp (mk_call $1 $3) }
|
||||||
| NOT exp
|
| NOT exp
|
||||||
{ mk_exp (mk_op_call "not" [] [$2]) }
|
{ mk_exp (mk_op_call "not" [] [$2]) }
|
||||||
|
@ -463,10 +455,10 @@ exp:
|
||||||
| exp AROBASE exp
|
| exp AROBASE exp
|
||||||
{ mk_exp (mk_array_op_call Econcat [$1; $3]) }
|
{ mk_exp (mk_array_op_call Econcat [$1; $3]) }
|
||||||
/*Iterators*/
|
/*Iterators*/
|
||||||
| iterator longname DOUBLE_LESS simple_exp DOUBLE_GREATER LPAREN exps RPAREN %prec prec_apply
|
| iterator longname DOUBLE_LESS simple_exp DOUBLE_GREATER LPAREN exps RPAREN
|
||||||
{ mk_exp (mk_iterator_call $1 $2 [] ($4::$7)) }
|
{ mk_exp (mk_iterator_call $1 $2 [] ($4::$7)) }
|
||||||
| iterator LPAREN longname DOUBLE_LESS array_exp_list DOUBLE_GREATER
|
| iterator LPAREN longname DOUBLE_LESS array_exp_list DOUBLE_GREATER
|
||||||
RPAREN DOUBLE_LESS simple_exp DOUBLE_GREATER LPAREN exps RPAREN %prec prec_apply
|
RPAREN DOUBLE_LESS simple_exp DOUBLE_GREATER LPAREN exps RPAREN
|
||||||
{ mk_exp (mk_iterator_call $1 $3 $5 ($9::$12)) }
|
{ mk_exp (mk_iterator_call $1 $3 $5 ($9::$12)) }
|
||||||
/*Records operators */
|
/*Records operators */
|
||||||
| exp WITH DOT longname EQUAL exp
|
| exp WITH DOT longname EQUAL exp
|
||||||
|
|
|
@ -19,44 +19,23 @@ let keyword_table = ((Hashtbl.create 149) : (string, token) Hashtbl.t);;
|
||||||
|
|
||||||
List.iter (fun (str,tok) -> Hashtbl.add keyword_table str tok) [
|
List.iter (fun (str,tok) -> Hashtbl.add keyword_table str tok) [
|
||||||
"node", NODE;
|
"node", NODE;
|
||||||
"fun", FUN;
|
|
||||||
"returns", RETURNS;
|
"returns", RETURNS;
|
||||||
"var", VAR;
|
"var", VAR;
|
||||||
"let", LET;
|
"let", LET;
|
||||||
"tel", TEL;
|
"tel", TEL;
|
||||||
"fby", FBY;
|
"fby", FBY;
|
||||||
"switch", SWITCH;
|
|
||||||
"when", WHEN;
|
"when", WHEN;
|
||||||
"type", TYPE;
|
"type", TYPE;
|
||||||
"every", EVERY;
|
|
||||||
"true", BOOL(true);
|
"true", BOOL(true);
|
||||||
"false", BOOL(false);
|
"false", BOOL(false);
|
||||||
"pre", PRE;
|
"pre", PRE;
|
||||||
"or", OR;
|
"or", OR;
|
||||||
"not", NOT;
|
"not", NOT;
|
||||||
"open", OPEN;
|
"open", OPEN;
|
||||||
"automaton", AUTOMATON;
|
|
||||||
"switch", SWITCH;
|
|
||||||
"present", PRESENT;
|
|
||||||
"reset", RESET;
|
"reset", RESET;
|
||||||
"state", STATE;
|
|
||||||
"unless", UNLESS;
|
|
||||||
"until", UNTIL;
|
|
||||||
"emit", EMIT;
|
|
||||||
"last", LAST;
|
|
||||||
"if", IF;
|
"if", IF;
|
||||||
"then", THEN;
|
"then", THEN;
|
||||||
"else", ELSE;
|
"else", ELSE;
|
||||||
"default", DEFAULT;
|
|
||||||
"continue", CONTINUE;
|
|
||||||
"case", CASE;
|
|
||||||
"do", DO;
|
|
||||||
"contract", CONTRACT;
|
|
||||||
"assume", ASSUME;
|
|
||||||
"enforce", ENFORCE;
|
|
||||||
"with", WITH;
|
|
||||||
"inlined", INLINED;
|
|
||||||
"at", AT;
|
|
||||||
"quo", INFIX3("quo");
|
"quo", INFIX3("quo");
|
||||||
"mod", INFIX3("mod");
|
"mod", INFIX3("mod");
|
||||||
"land", INFIX3("land");
|
"land", INFIX3("land");
|
||||||
|
@ -155,22 +134,6 @@ rule token = parse
|
||||||
{ INT (int_of_string(Lexing.lexeme lexbuf)) }
|
{ INT (int_of_string(Lexing.lexeme lexbuf)) }
|
||||||
| '-'? ['0'-'9']+ ('.' ['0'-'9']*)? (['e' 'E'] ['+' '-']? ['0'-'9']+)?
|
| '-'? ['0'-'9']+ ('.' ['0'-'9']*)? (['e' 'E'] ['+' '-']? ['0'-'9']+)?
|
||||||
{ FLOAT (float_of_string(Lexing.lexeme lexbuf)) }
|
{ FLOAT (float_of_string(Lexing.lexeme lexbuf)) }
|
||||||
| "\""
|
|
||||||
{ reset_string_buffer();
|
|
||||||
let string_start = lexbuf.lex_start_pos + lexbuf.lex_abs_pos in
|
|
||||||
begin try
|
|
||||||
string lexbuf
|
|
||||||
with Lexical_error(Unterminated_string, _, string_end) ->
|
|
||||||
raise(Lexical_error(Unterminated_string, string_start, string_end))
|
|
||||||
end;
|
|
||||||
lexbuf.lex_start_pos <- string_start - lexbuf.lex_abs_pos;
|
|
||||||
STRING (get_stored_string()) }
|
|
||||||
| "'" [^ '\\' '\''] "'"
|
|
||||||
{ CHAR(Lexing.lexeme_char lexbuf 1) }
|
|
||||||
| "'" '\\' ['\\' '\'' 'n' 't' 'b' 'r'] "'"
|
|
||||||
{ CHAR(char_for_backslash (Lexing.lexeme_char lexbuf 2)) }
|
|
||||||
| "'" '\\' ['0'-'9'] ['0'-'9'] ['0'-'9'] "'"
|
|
||||||
{ CHAR(char_for_decimal_code lexbuf 2) }
|
|
||||||
| "(*@ " (['A'-'Z' 'a'-'z']('_' ? ['A'-'Z' 'a'-'z' ''' '0'-'9']) * as id)
|
| "(*@ " (['A'-'Z' 'a'-'z']('_' ? ['A'-'Z' 'a'-'z' ''' '0'-'9']) * as id)
|
||||||
{
|
{
|
||||||
reset_string_buffer();
|
reset_string_buffer();
|
||||||
|
|
|
@ -25,35 +25,16 @@ let mk_var name ty = mk_var_dec name ty
|
||||||
%token <int> INT
|
%token <int> INT
|
||||||
%token <float> FLOAT
|
%token <float> FLOAT
|
||||||
%token <bool> BOOL
|
%token <bool> BOOL
|
||||||
%token <char> CHAR
|
|
||||||
%token <string> STRING
|
|
||||||
%token <string * string> PRAGMA
|
%token <string * string> PRAGMA
|
||||||
%token TYPE FUN NODE RETURNS VAR OPEN
|
%token TYPE NODE RETURNS VAR OPEN
|
||||||
%token FBY PRE SWITCH WHEN EVERY
|
%token FBY PRE WHEN
|
||||||
%token OR STAR NOT
|
%token OR STAR NOT
|
||||||
%token AMPERSAND
|
%token AMPERSAND
|
||||||
%token AMPERAMPER
|
%token AMPERAMPER
|
||||||
%token AUTOMATON
|
|
||||||
%token PRESENT
|
|
||||||
%token RESET
|
%token RESET
|
||||||
%token STATE
|
|
||||||
%token UNLESS
|
|
||||||
%token UNTIL
|
|
||||||
%token EMIT
|
|
||||||
%token LAST
|
|
||||||
%token IF
|
%token IF
|
||||||
%token THEN
|
%token THEN
|
||||||
%token ELSE
|
%token ELSE
|
||||||
%token DEFAULT
|
|
||||||
%token DO
|
|
||||||
%token CONTINUE
|
|
||||||
%token CASE
|
|
||||||
%token CONTRACT
|
|
||||||
%token ASSUME
|
|
||||||
%token ENFORCE
|
|
||||||
%token WITH
|
|
||||||
%token INLINED
|
|
||||||
%token AT
|
|
||||||
%token DOUBLE_LESS DOUBLE_GREATER
|
%token DOUBLE_LESS DOUBLE_GREATER
|
||||||
%token <string> PREFIX
|
%token <string> PREFIX
|
||||||
%token <string> INFIX0
|
%token <string> INFIX0
|
||||||
|
@ -65,23 +46,17 @@ let mk_var name ty = mk_var_dec name ty
|
||||||
%token EOF
|
%token EOF
|
||||||
|
|
||||||
|
|
||||||
%nonassoc prec_ident
|
%left ELSE
|
||||||
%left IF ELSE
|
|
||||||
%right ARROW
|
|
||||||
%nonassoc EVERY
|
|
||||||
%left OR
|
%left OR
|
||||||
%left AMPERSAND
|
%left AMPERSAND
|
||||||
%left INFIX0 EQUAL
|
%left INFIX0 EQUAL
|
||||||
%right INFIX1 EQUALEQUAL BARBAR AMPERAMPER
|
%right INFIX1 EQUALEQUAL BARBAR AMPERAMPER
|
||||||
%left INFIX2 SUBTRACTIVE
|
%left INFIX2 prefixs
|
||||||
%left STAR INFIX3
|
%left STAR INFIX3
|
||||||
%left INFIX4
|
%left INFIX4
|
||||||
%right prefixs
|
|
||||||
%right FBY
|
%right FBY
|
||||||
%right PRE
|
%right PRE
|
||||||
%right LAST
|
|
||||||
%right prec_apply
|
|
||||||
%left DOT
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,7 +139,7 @@ equs: LET e=slist(SEMICOL, equ) TEL { e }
|
||||||
equ: p=pat EQUAL e=exp { mk_equation p e }
|
equ: p=pat EQUAL e=exp { mk_equation p e }
|
||||||
|
|
||||||
pat:
|
pat:
|
||||||
| n=NAME {Evarpat (ident_of_name n)}
|
| n=NAME {Evarpat (ident_of_name n)}
|
||||||
| LPAREN p=snlist(COMMA, pat) RPAREN {Etuplepat p}
|
| LPAREN p=snlist(COMMA, pat) RPAREN {Etuplepat p}
|
||||||
|
|
||||||
longname: l=qualified(name) {l}
|
longname: l=qualified(name) {l}
|
||||||
|
@ -199,7 +174,7 @@ exp:
|
||||||
| p_op=prefix e=exp %prec prefixs
|
| p_op=prefix e=exp %prec prefixs
|
||||||
{ mk_exp (Ecall(mk_op ~op_kind:Eop p_op, [e], None)) }
|
{ mk_exp (Ecall(mk_op ~op_kind:Eop p_op, [e], None)) }
|
||||||
| IF e1=exp THEN e2=exp ELSE e3=exp { mk_exp (Eifthenelse(e1, e2, e3)) }
|
| IF e1=exp THEN e2=exp ELSE e3=exp { mk_exp (Eifthenelse(e1, e2, e3)) }
|
||||||
| e=simple_exp DOT m=longname { mk_exp (Efield(e, m)) }
|
| e=simple_exp DOT m=longname { mk_exp (Efield(e, m)) }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue