You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kalzium/src/solver/parser.ml

318 lines
11 KiB

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)