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.
318 lines
11 KiB
318 lines
11 KiB
15 years ago
|
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)
|