]> git.kianting.info Git - uann/blobdiff - ocaml_yacc/parser.ml
add ocaml EoC ast viewet
[uann] / ocaml_yacc / parser.ml
diff --git a/ocaml_yacc/parser.ml b/ocaml_yacc/parser.ml
new file mode 100644 (file)
index 0000000..9337a95
--- /dev/null
@@ -0,0 +1,327 @@
+type token =
+  | INT of (string)
+  | ID of (string)
+  | PLUS
+  | MINUS
+  | TIMES
+  | DIV
+  | LPAREN
+  | RPAREN
+  | ASSIGN
+  | IN
+  | IMPLY
+  | FUNC
+  | EOL
+
+open Parsing;;
+let _ = parse_error;;
+let yytransl_const = [|
+  259 (* PLUS *);
+  260 (* MINUS *);
+  261 (* TIMES *);
+  262 (* DIV *);
+  263 (* LPAREN *);
+  264 (* RPAREN *);
+  265 (* ASSIGN *);
+  266 (* IN *);
+  267 (* IMPLY *);
+  268 (* FUNC *);
+  269 (* EOL *);
+    0|]
+
+let yytransl_block = [|
+  257 (* INT *);
+  258 (* ID *);
+    0|]
+
+let yylhs = "\255\255\
+\001\000\002\000\002\000\003\000\003\000\005\000\006\000\006\000\
+\004\000\004\000\004\000\009\000\010\000\007\000\008\000\008\000\
+\008\000\008\000\008\000\008\000\008\000\008\000\000\000"
+
+let yylen = "\002\000\
+\002\000\001\000\002\000\001\000\001\000\006\000\001\000\003\000\
+\001\000\001\000\001\000\003\000\002\000\002\000\001\000\001\000\
+\003\000\003\000\003\000\003\000\003\000\002\000\002\000"
+
+let yydefred = "\000\000\
+\000\000\000\000\015\000\000\000\000\000\000\000\023\000\000\000\
+\002\000\000\000\005\000\000\000\009\000\010\000\011\000\000\000\
+\000\000\000\000\000\000\001\000\003\000\000\000\000\000\000\000\
+\000\000\000\000\000\000\000\000\000\000\013\000\017\000\000\000\
+\000\000\000\000\000\000\000\000\007\000\000\000\012\000\000\000\
+\000\000\006\000"
+
+let yydgoto = "\002\000\
+\007\000\008\000\009\000\026\000\011\000\018\000\013\000\014\000\
+\015\000\016\000"
+
+let yysindex = "\007\000\
+\120\255\000\000\000\000\000\000\120\255\120\255\000\000\012\255\
+\000\000\106\255\000\000\001\255\000\000\000\000\000\000\245\254\
+\124\255\049\255\098\255\000\000\000\000\120\255\120\255\120\255\
+\120\255\106\255\009\255\024\255\120\255\000\000\000\000\113\255\
+\124\255\124\255\124\255\120\255\000\000\026\255\000\000\088\255\
+\120\255\000\000"
+
+let yyrindex = "\000\000\
+\000\000\000\000\000\000\042\255\000\000\000\000\000\000\000\000\
+\000\000\063\255\000\000\000\000\000\000\000\000\000\000\000\000\
+\028\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+\000\000\074\255\050\255\000\000\000\000\000\000\000\000\007\255\
+\053\255\064\255\075\255\000\000\000\000\052\255\000\000\000\000\
+\000\000\000\000"
+
+let yygindex = "\000\000\
+\000\000\000\000\254\255\255\255\000\000\001\000\000\000\000\000\
+\000\000\000\000"
+
+let yytablesize = 131
+let yytable = "\010\000\
+\029\000\012\000\027\000\017\000\019\000\021\000\010\000\001\000\
+\012\000\018\000\018\000\028\000\003\000\004\000\018\000\005\000\
+\018\000\036\000\006\000\018\000\032\000\033\000\034\000\035\000\
+\020\000\037\000\039\000\010\000\038\000\012\000\022\000\022\000\
+\022\000\022\000\040\000\022\000\028\000\022\000\042\000\010\000\
+\022\000\012\000\016\000\007\000\016\000\016\000\016\000\016\000\
+\016\000\016\000\030\000\016\000\007\000\008\000\016\000\019\000\
+\019\000\022\000\022\000\028\000\019\000\013\000\019\000\000\000\
+\000\000\019\000\020\000\020\000\020\000\020\000\004\000\020\000\
+\004\000\020\000\000\000\004\000\020\000\021\000\021\000\021\000\
+\021\000\014\000\021\000\014\000\021\000\000\000\014\000\021\000\
+\003\000\004\000\022\000\023\000\024\000\025\000\006\000\000\000\
+\000\000\041\000\003\000\004\000\022\000\023\000\024\000\025\000\
+\006\000\031\000\003\000\004\000\022\000\023\000\024\000\025\000\
+\006\000\003\000\004\000\000\000\000\000\024\000\025\000\006\000\
+\003\000\004\000\000\000\005\000\003\000\004\000\006\000\000\000\
+\000\000\000\000\006\000"
+
+let yycheck = "\001\000\
+\012\001\001\000\002\001\005\000\006\000\008\000\008\000\001\000\
+\008\000\003\001\004\001\011\001\001\001\002\001\008\001\004\001\
+\010\001\009\001\007\001\013\001\022\000\023\000\024\000\025\000\
+\013\001\002\001\029\000\029\000\028\000\029\000\003\001\004\001\
+\005\001\006\001\036\000\008\001\011\001\010\001\041\000\041\000\
+\013\001\041\000\001\001\002\001\003\001\004\001\005\001\006\001\
+\007\001\008\001\002\001\010\001\011\001\002\001\013\001\003\001\
+\004\001\005\001\006\001\011\001\008\001\012\001\010\001\255\255\
+\255\255\013\001\003\001\004\001\005\001\006\001\008\001\008\001\
+\010\001\010\001\255\255\013\001\013\001\003\001\004\001\005\001\
+\006\001\008\001\008\001\010\001\010\001\255\255\013\001\013\001\
+\001\001\002\001\003\001\004\001\005\001\006\001\007\001\255\255\
+\255\255\010\001\001\001\002\001\003\001\004\001\005\001\006\001\
+\007\001\008\001\001\001\002\001\003\001\004\001\005\001\006\001\
+\007\001\001\001\002\001\255\255\255\255\005\001\006\001\007\001\
+\001\001\002\001\255\255\004\001\001\001\002\001\007\001\255\255\
+\255\255\255\255\007\001"
+
+let yynames_const = "\
+  PLUS\000\
+  MINUS\000\
+  TIMES\000\
+  DIV\000\
+  LPAREN\000\
+  RPAREN\000\
+  ASSIGN\000\
+  IN\000\
+  IMPLY\000\
+  FUNC\000\
+  EOL\000\
+  "
+
+let yynames_block = "\
+  INT\000\
+  ID\000\
+  "
+
+let yyact = [|
+  (fun _ -> failwith "parser")
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'blocks) in
+    Obj.repr(
+# 15 "parser.mly"
+              (  _1 )
+# 145 "parser.ml"
+               : Ast.ast))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'block) in
+    Obj.repr(
+# 18 "parser.mly"
+     (  _1 )
+# 152 "parser.ml"
+               : 'blocks))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'blocks) in
+    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'block) in
+    Obj.repr(
+# 19 "parser.mly"
+             (match _1 with Ast.Node x -> Ast.Node (x @ [_2])
+                               | Ast.Int x -> Ast.Node[_1; _2] | Ast.Leaf x -> Ast.Node [_1; _2])
+# 161 "parser.ml"
+               : 'blocks))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 24 "parser.mly"
+       (_1)
+# 168 "parser.ml"
+               : 'block))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'let_bind) in
+    Obj.repr(
+# 25 "parser.mly"
+           (_1)
+# 175 "parser.ml"
+               : 'block))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 5 : 'typ) in
+    let _2 = (Parsing.peek_val __caml_parser_env 4 : string) in
+    let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
+    let _6 = (Parsing.peek_val __caml_parser_env 0 : 'block) in
+    Obj.repr(
+# 29 "parser.mly"
+                              (Ast.Node [Ast.Leaf "%let"; Ast.Node[_1; Ast.Leaf _2; _4]; _6])
+# 185 "parser.ml"
+               : 'let_bind))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
+    Obj.repr(
+# 33 "parser.mly"
+     (Ast.Leaf _1)
+# 192 "parser.ml"
+               : 'typ))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'typ) in
+    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in
+    Obj.repr(
+# 34 "parser.mly"
+                (Ast.Node [Ast.Leaf "->"; _1 ; _3])
+# 200 "parser.ml"
+               : 'typ))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'app_expr) in
+    Obj.repr(
+# 37 "parser.mly"
+          (_1)
+# 207 "parser.ml"
+               : 'expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'bin_expr) in
+    Obj.repr(
+# 38 "parser.mly"
+           (_1)
+# 214 "parser.ml"
+               : 'expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : 'lam_expr) in
+    Obj.repr(
+# 39 "parser.mly"
+          (_1)
+# 221 "parser.ml"
+               : 'expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'arg) in
+    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'block) in
+    Obj.repr(
+# 43 "parser.mly"
+               (Ast.Node [Ast.Leaf "%lambda"; _1 ; _3])
+# 229 "parser.ml"
+               : 'lam_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'typ) in
+    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
+    Obj.repr(
+# 46 "parser.mly"
+       ( Ast.Node [_1;Ast.Leaf _2] )
+# 237 "parser.ml"
+               : 'arg))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
+    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 50 "parser.mly"
+           ( Ast.Node [ Ast.Leaf "%apply"; _1; _2] )
+# 245 "parser.ml"
+               : 'app_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
+    Obj.repr(
+# 54 "parser.mly"
+            ( Ast.Int (int_of_string _1))
+# 252 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in
+    Obj.repr(
+# 55 "parser.mly"
+            ( Ast.Leaf _1 )
+# 259 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _2 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in
+    Obj.repr(
+# 56 "parser.mly"
+                            ( _2 )
+# 266 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
+    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 57 "parser.mly"
+                    ( Ast.Node [ Ast.Leaf "+"; _1; _3] )
+# 274 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
+    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 58 "parser.mly"
+                    ( Ast.Node[ Ast.Leaf "-"; _1 ; _3] )
+# 282 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
+    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 59 "parser.mly"
+                    ( Ast.Node[ Ast.Leaf "*"; _1 ;_3] )
+# 290 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in
+    let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 60 "parser.mly"
+                    ( Ast.Node[ Ast.Leaf "/"; _1; _3] )
+# 298 "parser.ml"
+               : 'bin_expr))
+; (fun __caml_parser_env ->
+    let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in
+    Obj.repr(
+# 61 "parser.mly"
+                            ( Ast.Node[ Ast.Leaf  "-" ; _2] )
+# 305 "parser.ml"
+               : 'bin_expr))
+(* Entry main *)
+; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
+|]
+let yytables =
+  { Parsing.actions=yyact;
+    Parsing.transl_const=yytransl_const;
+    Parsing.transl_block=yytransl_block;
+    Parsing.lhs=yylhs;
+    Parsing.len=yylen;
+    Parsing.defred=yydefred;
+    Parsing.dgoto=yydgoto;
+    Parsing.sindex=yysindex;
+    Parsing.rindex=yyrindex;
+    Parsing.gindex=yygindex;
+    Parsing.tablesize=yytablesize;
+    Parsing.table=yytable;
+    Parsing.check=yycheck;
+    Parsing.error_function=parse_error;
+    Parsing.names_const=yynames_const;
+    Parsing.names_block=yynames_block }
+let main (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
+   (Parsing.yyparse yytables 1 lexfun lexbuf : Ast.ast)