summaryrefslogtreecommitdiffstats
path: root/kalzium/src/solver/parser.ml
diff options
context:
space:
mode:
Diffstat (limited to 'kalzium/src/solver/parser.ml')
-rw-r--r--kalzium/src/solver/parser.ml317
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)