diff options
Diffstat (limited to 'kalzium/src/solver/parser.ml')
-rw-r--r-- | kalzium/src/solver/parser.ml | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/kalzium/src/solver/parser.ml b/kalzium/src/solver/parser.ml new file mode 100644 index 00000000..8d7cc3c6 --- /dev/null +++ b/kalzium/src/solver/parser.ml @@ -0,0 +1,317 @@ +type token = + | INT of (int) + | PLUS + | MINUS + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | EOF + | CAPITAL of (string) + | MINOR of (string) + | ARROW + +open Parsing;; +# 26 "parser.mly" + open Chemset + + (*let parse_error somestring = Printf.printf "%s \n" somestring;; + *) +# 21 "parser.ml" +let yytransl_const = [| + 258 (* PLUS *); + 259 (* MINUS *); + 260 (* LPAREN *); + 261 (* RPAREN *); + 262 (* LBRACKET *); + 263 (* RBRACKET *); + 0 (* EOF *); + 266 (* ARROW *); + 0|] + +let yytransl_block = [| + 257 (* INT *); + 264 (* CAPITAL *); + 265 (* MINOR *); + 0|] + +let yylhs = "\255\255\ +\001\000\002\000\003\000\003\000\004\000\004\000\005\000\005\000\ +\006\000\006\000\006\000\006\000\006\000\006\000\006\000\007\000\ +\007\000\000\000" + +let yylen = "\002\000\ +\002\000\003\000\001\000\003\000\002\000\002\000\001\000\002\000\ +\002\000\001\000\004\000\004\000\004\000\003\000\003\000\002\000\ +\001\000\002\000" + +let yydefred = "\000\000\ +\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\006\000\000\000\000\000\005\000\001\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\016\000\008\000\ +\009\000\002\000\004\000\000\000\000\000\000\000\014\000\015\000\ +\011\000\012\000\013\000" + +let yydgoto = "\002\000\ +\005\000\006\000\007\000\008\000\012\000\013\000\014\000" + +let yysindex = "\255\255\ +\003\255\000\000\010\255\010\255\000\000\003\000\252\254\011\255\ +\010\255\018\255\008\255\000\000\010\255\021\255\000\000\000\000\ +\003\255\003\255\020\255\007\255\019\255\022\255\000\000\000\000\ +\000\000\000\000\000\000\026\255\023\255\024\255\000\000\000\000\ +\000\000\000\000\000\000" + +let yyrindex = "\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\ +\000\000\000\000\001\000\000\000\015\000\008\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000" + +let yygindex = "\000\000\ +\000\000\000\000\006\000\000\000\254\255\000\000\000\000" + +let yytablesize = 281 +let yytable = "\001\000\ +\017\000\015\000\016\000\003\000\003\000\017\000\019\000\010\000\ +\029\000\030\000\024\000\004\000\018\000\009\000\007\000\010\000\ +\023\000\011\000\020\000\021\000\022\000\025\000\026\000\027\000\ +\028\000\031\000\033\000\000\000\032\000\034\000\035\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\017\000\017\000\000\000\017\000\017\000\017\000\000\000\ +\017\000\010\000\017\000\010\000\010\000\010\000\003\000\010\000\ +\007\000\010\000\000\000\007\000\000\000\000\000\000\000\000\000\ +\007\000" + +let yycheck = "\001\000\ +\000\000\004\000\000\000\001\001\000\000\010\001\009\000\000\000\ +\002\001\003\001\013\000\009\001\002\001\004\001\000\000\006\001\ +\009\001\008\001\001\001\002\001\003\001\001\001\017\000\018\000\ +\005\001\007\001\001\001\255\255\007\001\007\001\007\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\001\001\002\001\255\255\004\001\005\001\006\001\255\255\ +\008\001\002\001\010\001\004\001\005\001\006\001\010\001\008\001\ +\002\001\010\001\255\255\005\001\255\255\255\255\255\255\255\255\ +\010\001" + +let yynames_const = "\ + PLUS\000\ + MINUS\000\ + LPAREN\000\ + RPAREN\000\ + LBRACKET\000\ + RBRACKET\000\ + EOF\000\ + ARROW\000\ + " + +let yynames_block = "\ + INT\000\ + CAPITAL\000\ + MINOR\000\ + " + +let yyact = [| + (fun _ -> failwith "parser") +; (fun parser_env -> + let _1 = (peek_val parser_env 1 : 'equation) in + Obj.repr( +# 44 "parser.mly" + ( _1 ) +# 177 "parser.ml" + : Chemset.listitems)) +; (fun parser_env -> + let _1 = (peek_val parser_env 2 : 'expr) in + let _3 = (peek_val parser_env 0 : 'expr) in + Obj.repr( +# 49 "parser.mly" + ( chem_negate _3; List.append _1 _3 ) +# 185 "parser.ml" + : 'equation)) +; (fun parser_env -> + let _1 = (peek_val parser_env 0 : 'item) in + Obj.repr( +# 53 "parser.mly" + ( _1::[] ) +# 192 "parser.ml" + : 'expr)) +; (fun parser_env -> + let _1 = (peek_val parser_env 2 : 'item) in + let _3 = (peek_val parser_env 0 : 'expr) in + Obj.repr( +# 54 "parser.mly" + ( _1::_3 ) +# 200 "parser.ml" + : 'expr)) +; (fun parser_env -> + let _1 = (peek_val parser_env 1 : string) in + let _2 = (peek_val parser_env 0 : 'symbols) in + Obj.repr( +# 58 "parser.mly" + ( {ikey=_1; itbl=_2; sign=1} ) +# 208 "parser.ml" + : 'item)) +; (fun parser_env -> + let _1 = (peek_val parser_env 1 : int) in + let _2 = (peek_val parser_env 0 : 'symbols) in + Obj.repr( +# 59 "parser.mly" + ( {ikey=string_of_int(_1); itbl=_2; sign=1} ) +# 216 "parser.ml" + : 'item)) +; (fun parser_env -> + let _1 = (peek_val parser_env 0 : 'qte) in + Obj.repr( +# 63 "parser.mly" + ( _1 ) +# 223 "parser.ml" + : 'symbols)) +; (fun parser_env -> + let _1 = (peek_val parser_env 1 : 'qte) in + let _2 = (peek_val parser_env 0 : 'symbols) in + Obj.repr( +# 64 "parser.mly" + ( chem_add _1 _2 ) +# 231 "parser.ml" + : 'symbols)) +; (fun parser_env -> + let _1 = (peek_val parser_env 1 : 'element) in + let _2 = (peek_val parser_env 0 : int) in + Obj.repr( +# 68 "parser.mly" + ( createchem _1 _2 ) +# 239 "parser.ml" + : 'qte)) +; (fun parser_env -> + let _1 = (peek_val parser_env 0 : 'element) in + Obj.repr( +# 69 "parser.mly" + ( createchem _1 1 ) +# 246 "parser.ml" + : 'qte)) +; (fun parser_env -> + let _2 = (peek_val parser_env 2 : 'symbols) in + let _4 = (peek_val parser_env 0 : int) in + Obj.repr( +# 70 "parser.mly" + ( chem_mult _2 _4 ) +# 254 "parser.ml" + : 'qte)) +; (fun parser_env -> + let _2 = (peek_val parser_env 2 : int) in + Obj.repr( +# 71 "parser.mly" + ( createchem "+" _2 ) +# 261 "parser.ml" + : 'qte)) +; (fun parser_env -> + let _2 = (peek_val parser_env 2 : int) in + Obj.repr( +# 72 "parser.mly" + ( createchem "-" _2 ) +# 268 "parser.ml" + : 'qte)) +; (fun parser_env -> + Obj.repr( +# 73 "parser.mly" + ( createchem "+" 1 ) +# 274 "parser.ml" + : 'qte)) +; (fun parser_env -> + Obj.repr( +# 74 "parser.mly" + ( createchem "-" 1 ) +# 280 "parser.ml" + : 'qte)) +; (fun parser_env -> + let _1 = (peek_val parser_env 1 : string) in + let _2 = (peek_val parser_env 0 : string) in + Obj.repr( +# 78 "parser.mly" + ( _1 ^ _2 ) +# 288 "parser.ml" + : 'element)) +; (fun parser_env -> + let _1 = (peek_val parser_env 0 : string) in + Obj.repr( +# 79 "parser.mly" + ( _1 ) +# 295 "parser.ml" + : 'element)) +(* Entry main *) +; (fun parser_env -> raise (YYexit (peek_val parser_env 0))) +|] +let yytables = + { actions=yyact; + transl_const=yytransl_const; + transl_block=yytransl_block; + lhs=yylhs; + len=yylen; + defred=yydefred; + dgoto=yydgoto; + sindex=yysindex; + rindex=yyrindex; + gindex=yygindex; + tablesize=yytablesize; + table=yytable; + check=yycheck; + error_function=parse_error; + names_const=yynames_const; + names_block=yynames_block } +let main (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (yyparse yytables 1 lexfun lexbuf : Chemset.listitems) |