parsing warning removed.
This commit is contained in:
parent
7c0c2e0415
commit
88732ef2a9
4 changed files with 12 additions and 102 deletions
|
@ -45,21 +45,17 @@ List.iter (fun (str,tok) -> Hashtbl.add keyword_table str tok) [
|
|||
"state", STATE;
|
||||
"unless", UNLESS;
|
||||
"until", UNTIL;
|
||||
"emit", EMIT;
|
||||
"last", LAST;
|
||||
"if", IF;
|
||||
"then", THEN;
|
||||
"else", ELSE;
|
||||
"default", DEFAULT;
|
||||
"continue", CONTINUE;
|
||||
"case", CASE;
|
||||
"do", DO;
|
||||
"contract", CONTRACT;
|
||||
"assume", ASSUME;
|
||||
"enforce", ENFORCE;
|
||||
"with", WITH;
|
||||
"inlined", INLINED;
|
||||
"with", WITH;
|
||||
"map", MAP;
|
||||
"fold", FOLD;
|
||||
"mapfold", MAPFOLD;
|
||||
|
@ -170,22 +166,6 @@ rule token = parse
|
|||
{ INT (int_of_string(Lexing.lexeme lexbuf)) }
|
||||
| ['0'-'9']+ ('.' ['0'-'9']*)? (['e' 'E'] ['+' '-']? ['0'-'9']+)?
|
||||
{ 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)
|
||||
{
|
||||
reset_string_buffer();
|
||||
|
|
|
@ -15,10 +15,8 @@ open Parsetree
|
|||
%token <int> INT
|
||||
%token <float> FLOAT
|
||||
%token <bool> BOOL
|
||||
%token <char> CHAR
|
||||
%token <string> STRING
|
||||
%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 OR STAR NOT
|
||||
%token AMPERSAND
|
||||
|
@ -29,7 +27,6 @@ open Parsetree
|
|||
%token STATE
|
||||
%token UNLESS
|
||||
%token UNTIL
|
||||
%token EMIT
|
||||
%token LAST
|
||||
%token IF
|
||||
%token THEN
|
||||
|
@ -37,12 +34,10 @@ open Parsetree
|
|||
%token DEFAULT
|
||||
%token DO
|
||||
%token CONTINUE
|
||||
%token CASE
|
||||
%token CONTRACT
|
||||
%token ASSUME
|
||||
%token ENFORCE
|
||||
%token WITH
|
||||
%token INLINED
|
||||
%token POWER
|
||||
%token LBRACKET
|
||||
%token RBRACKET
|
||||
|
@ -63,9 +58,8 @@ open Parsetree
|
|||
%left WITH
|
||||
%nonassoc prec_ident
|
||||
%nonassoc LBRACKET
|
||||
%left IF ELSE
|
||||
%left ELSE
|
||||
%right ARROW
|
||||
%nonassoc EVERY
|
||||
%left OR
|
||||
%left AMPERSAND
|
||||
%left INFIX0 EQUAL
|
||||
|
@ -77,8 +71,6 @@ open Parsetree
|
|||
%right prec_uminus
|
||||
%right FBY
|
||||
%right PRE
|
||||
%right LAST
|
||||
%right prec_apply
|
||||
%left POWER
|
||||
%right PREFIX
|
||||
%left DOT
|
||||
|
@ -413,7 +405,7 @@ exp:
|
|||
{ mk_exp (Eapp(mk_app Efby, [$1; $3])) }
|
||||
| PRE exp
|
||||
{ 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) }
|
||||
| NOT exp
|
||||
{ mk_exp (mk_op_call "not" [] [$2]) }
|
||||
|
@ -463,10 +455,10 @@ exp:
|
|||
| exp AROBASE exp
|
||||
{ mk_exp (mk_array_op_call Econcat [$1; $3]) }
|
||||
/*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)) }
|
||||
| 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)) }
|
||||
/*Records operators */
|
||||
| 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) [
|
||||
"node", NODE;
|
||||
"fun", FUN;
|
||||
"returns", RETURNS;
|
||||
"var", VAR;
|
||||
"let", LET;
|
||||
"tel", TEL;
|
||||
"fby", FBY;
|
||||
"switch", SWITCH;
|
||||
"when", WHEN;
|
||||
"type", TYPE;
|
||||
"every", EVERY;
|
||||
"true", BOOL(true);
|
||||
"false", BOOL(false);
|
||||
"pre", PRE;
|
||||
"or", OR;
|
||||
"not", NOT;
|
||||
"open", OPEN;
|
||||
"automaton", AUTOMATON;
|
||||
"switch", SWITCH;
|
||||
"present", PRESENT;
|
||||
"reset", RESET;
|
||||
"state", STATE;
|
||||
"unless", UNLESS;
|
||||
"until", UNTIL;
|
||||
"emit", EMIT;
|
||||
"last", LAST;
|
||||
"if", IF;
|
||||
"then", THEN;
|
||||
"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");
|
||||
"mod", INFIX3("mod");
|
||||
"land", INFIX3("land");
|
||||
|
@ -155,22 +134,6 @@ rule token = parse
|
|||
{ INT (int_of_string(Lexing.lexeme lexbuf)) }
|
||||
| '-'? ['0'-'9']+ ('.' ['0'-'9']*)? (['e' 'E'] ['+' '-']? ['0'-'9']+)?
|
||||
{ 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)
|
||||
{
|
||||
reset_string_buffer();
|
||||
|
|
|
@ -25,35 +25,16 @@ let mk_var name ty = mk_var_dec name ty
|
|||
%token <int> INT
|
||||
%token <float> FLOAT
|
||||
%token <bool> BOOL
|
||||
%token <char> CHAR
|
||||
%token <string> STRING
|
||||
%token <string * string> PRAGMA
|
||||
%token TYPE FUN NODE RETURNS VAR OPEN
|
||||
%token FBY PRE SWITCH WHEN EVERY
|
||||
%token TYPE NODE RETURNS VAR OPEN
|
||||
%token FBY PRE WHEN
|
||||
%token OR STAR NOT
|
||||
%token AMPERSAND
|
||||
%token AMPERAMPER
|
||||
%token AUTOMATON
|
||||
%token PRESENT
|
||||
%token RESET
|
||||
%token STATE
|
||||
%token UNLESS
|
||||
%token UNTIL
|
||||
%token EMIT
|
||||
%token LAST
|
||||
%token IF
|
||||
%token THEN
|
||||
%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 <string> PREFIX
|
||||
%token <string> INFIX0
|
||||
|
@ -65,23 +46,17 @@ let mk_var name ty = mk_var_dec name ty
|
|||
%token EOF
|
||||
|
||||
|
||||
%nonassoc prec_ident
|
||||
%left IF ELSE
|
||||
%right ARROW
|
||||
%nonassoc EVERY
|
||||
%left ELSE
|
||||
|
||||
%left OR
|
||||
%left AMPERSAND
|
||||
%left INFIX0 EQUAL
|
||||
%right INFIX1 EQUALEQUAL BARBAR AMPERAMPER
|
||||
%left INFIX2 SUBTRACTIVE
|
||||
%left INFIX2 prefixs
|
||||
%left STAR INFIX3
|
||||
%left INFIX4
|
||||
%right prefixs
|
||||
%right FBY
|
||||
%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 }
|
||||
|
||||
pat:
|
||||
| n=NAME {Evarpat (ident_of_name n)}
|
||||
| n=NAME {Evarpat (ident_of_name n)}
|
||||
| LPAREN p=snlist(COMMA, pat) RPAREN {Etuplepat p}
|
||||
|
||||
longname: l=qualified(name) {l}
|
||||
|
@ -199,7 +174,7 @@ exp:
|
|||
| p_op=prefix e=exp %prec prefixs
|
||||
{ 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)) }
|
||||
| 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