// Implementation file for parser generated by fsyacc
module Parser
#nowarn "64";; // turn off warnings that type variables used in production annotations are instantiated to concrete type
open FSharp.Text.Lexing
open FSharp.Text.Parsing.ParseHelpers
# 1 "/home/zhxchen17/punklang/parser/parse.fsy"

#light "off"
open Tir

# 11 "parse.fs"
// This type is the type of tokens accepted by the parser
type token = 
  | WHILE
  | VAR
  | TRUE
  | STRUCT
  | STRING of (string)
  | SEMICOLON
  | RPAREN
  | RETURN
  | RBRACE
  | RBOX
  | PRINTF
  | PLUS
  | MINUS
  | LPAREN
  | LET
  | LESS
  | LBRACE
  | LBOX
  | INT of (int)
  | IF
  | ID of (string)
  | FUNC
  | FALSE
  | EQUAL
  | EOF
  | ELSE
  | DOT
  | CSTRING
  | COMMA
  | COLON
  | CINT
  | CBOOL
  | ASTERISK
  | ASSIGN
// This type is used to give symbolic names to token indexes, useful for error messages
type tokenId = 
    | TOKEN_WHILE
    | TOKEN_VAR
    | TOKEN_TRUE
    | TOKEN_STRUCT
    | TOKEN_STRING
    | TOKEN_SEMICOLON
    | TOKEN_RPAREN
    | TOKEN_RETURN
    | TOKEN_RBRACE
    | TOKEN_RBOX
    | TOKEN_PRINTF
    | TOKEN_PLUS
    | TOKEN_MINUS
    | TOKEN_LPAREN
    | TOKEN_LET
    | TOKEN_LESS
    | TOKEN_LBRACE
    | TOKEN_LBOX
    | TOKEN_INT
    | TOKEN_IF
    | TOKEN_ID
    | TOKEN_FUNC
    | TOKEN_FALSE
    | TOKEN_EQUAL
    | TOKEN_EOF
    | TOKEN_ELSE
    | TOKEN_DOT
    | TOKEN_CSTRING
    | TOKEN_COMMA
    | TOKEN_COLON
    | TOKEN_CINT
    | TOKEN_CBOOL
    | TOKEN_ASTERISK
    | TOKEN_ASSIGN
    | TOKEN_end_of_input
    | TOKEN_error
// This type is used to give symbolic names to token indexes, useful for error messages
type nonTerminalId = 
    | NONTERM__startterm
    | NONTERM__startprog
    | NONTERM_option_VAR_
    | NONTERM_loption_separated_nonempty_list_COMMA_con__
    | NONTERM_loption_separated_nonempty_list_COMMA_expr__
    | NONTERM_loption_separated_nonempty_list_COMMA_param__
    | NONTERM_loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con___
    | NONTERM_loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr___
    | NONTERM_list_stmt_
    | NONTERM_separated_nonempty_list_COMMA_con_
    | NONTERM_separated_nonempty_list_COMMA_expr_
    | NONTERM_separated_nonempty_list_COMMA_param_
    | NONTERM_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__
    | NONTERM_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__
    | NONTERM_prog
    | NONTERM_term
    | NONTERM_expr
    | NONTERM_stmt
    | NONTERM_con

// This function maps tokens to integer indexes
let tagOfToken (t:token) = 
  match t with
  | WHILE  -> 0 
  | VAR  -> 1 
  | TRUE  -> 2 
  | STRUCT  -> 3 
  | STRING _ -> 4 
  | SEMICOLON  -> 5 
  | RPAREN  -> 6 
  | RETURN  -> 7 
  | RBRACE  -> 8 
  | RBOX  -> 9 
  | PRINTF  -> 10 
  | PLUS  -> 11 
  | MINUS  -> 12 
  | LPAREN  -> 13 
  | LET  -> 14 
  | LESS  -> 15 
  | LBRACE  -> 16 
  | LBOX  -> 17 
  | INT _ -> 18 
  | IF  -> 19 
  | ID _ -> 20 
  | FUNC  -> 21 
  | FALSE  -> 22 
  | EQUAL  -> 23 
  | EOF  -> 24 
  | ELSE  -> 25 
  | DOT  -> 26 
  | CSTRING  -> 27 
  | COMMA  -> 28 
  | COLON  -> 29 
  | CINT  -> 30 
  | CBOOL  -> 31 
  | ASTERISK  -> 32 
  | ASSIGN  -> 33 

// This function maps integer indexes to symbolic token ids
let tokenTagToTokenId (tokenIdx:int) = 
  match tokenIdx with
  | 0 -> TOKEN_WHILE 
  | 1 -> TOKEN_VAR 
  | 2 -> TOKEN_TRUE 
  | 3 -> TOKEN_STRUCT 
  | 4 -> TOKEN_STRING 
  | 5 -> TOKEN_SEMICOLON 
  | 6 -> TOKEN_RPAREN 
  | 7 -> TOKEN_RETURN 
  | 8 -> TOKEN_RBRACE 
  | 9 -> TOKEN_RBOX 
  | 10 -> TOKEN_PRINTF 
  | 11 -> TOKEN_PLUS 
  | 12 -> TOKEN_MINUS 
  | 13 -> TOKEN_LPAREN 
  | 14 -> TOKEN_LET 
  | 15 -> TOKEN_LESS 
  | 16 -> TOKEN_LBRACE 
  | 17 -> TOKEN_LBOX 
  | 18 -> TOKEN_INT 
  | 19 -> TOKEN_IF 
  | 20 -> TOKEN_ID 
  | 21 -> TOKEN_FUNC 
  | 22 -> TOKEN_FALSE 
  | 23 -> TOKEN_EQUAL 
  | 24 -> TOKEN_EOF 
  | 25 -> TOKEN_ELSE 
  | 26 -> TOKEN_DOT 
  | 27 -> TOKEN_CSTRING 
  | 28 -> TOKEN_COMMA 
  | 29 -> TOKEN_COLON 
  | 30 -> TOKEN_CINT 
  | 31 -> TOKEN_CBOOL 
  | 32 -> TOKEN_ASTERISK 
  | 33 -> TOKEN_ASSIGN 
  | 36 -> TOKEN_end_of_input
  | 34 -> TOKEN_error
  | _ -> failwith "tokenTagToTokenId: bad token"

/// This function maps production indexes returned in syntax errors to strings representing the non terminal that would be produced by that production
let prodIdxToNonTerminal (prodIdx:int) = 
  match prodIdx with
    | 0 -> NONTERM__startterm 
    | 1 -> NONTERM__startprog 
    | 2 -> NONTERM_option_VAR_ 
    | 3 -> NONTERM_option_VAR_ 
    | 4 -> NONTERM_loption_separated_nonempty_list_COMMA_con__ 
    | 5 -> NONTERM_loption_separated_nonempty_list_COMMA_con__ 
    | 6 -> NONTERM_loption_separated_nonempty_list_COMMA_expr__ 
    | 7 -> NONTERM_loption_separated_nonempty_list_COMMA_expr__ 
    | 8 -> NONTERM_loption_separated_nonempty_list_COMMA_param__ 
    | 9 -> NONTERM_loption_separated_nonempty_list_COMMA_param__ 
    | 10 -> NONTERM_loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con___ 
    | 11 -> NONTERM_loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con___ 
    | 12 -> NONTERM_loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr___ 
    | 13 -> NONTERM_loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr___ 
    | 14 -> NONTERM_list_stmt_ 
    | 15 -> NONTERM_list_stmt_ 
    | 16 -> NONTERM_separated_nonempty_list_COMMA_con_ 
    | 17 -> NONTERM_separated_nonempty_list_COMMA_con_ 
    | 18 -> NONTERM_separated_nonempty_list_COMMA_expr_ 
    | 19 -> NONTERM_separated_nonempty_list_COMMA_expr_ 
    | 20 -> NONTERM_separated_nonempty_list_COMMA_param_ 
    | 21 -> NONTERM_separated_nonempty_list_COMMA_param_ 
    | 22 -> NONTERM_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__ 
    | 23 -> NONTERM_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__ 
    | 24 -> NONTERM_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__ 
    | 25 -> NONTERM_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__ 
    | 26 -> NONTERM_prog 
    | 27 -> NONTERM_term 
    | 28 -> NONTERM_expr 
    | 29 -> NONTERM_expr 
    | 30 -> NONTERM_expr 
    | 31 -> NONTERM_expr 
    | 32 -> NONTERM_expr 
    | 33 -> NONTERM_expr 
    | 34 -> NONTERM_expr 
    | 35 -> NONTERM_expr 
    | 36 -> NONTERM_expr 
    | 37 -> NONTERM_expr 
    | 38 -> NONTERM_expr 
    | 39 -> NONTERM_expr 
    | 40 -> NONTERM_expr 
    | 41 -> NONTERM_expr 
    | 42 -> NONTERM_expr 
    | 43 -> NONTERM_expr 
    | 44 -> NONTERM_expr 
    | 45 -> NONTERM_stmt 
    | 46 -> NONTERM_stmt 
    | 47 -> NONTERM_stmt 
    | 48 -> NONTERM_stmt 
    | 49 -> NONTERM_stmt 
    | 50 -> NONTERM_stmt 
    | 51 -> NONTERM_stmt 
    | 52 -> NONTERM_stmt 
    | 53 -> NONTERM_stmt 
    | 54 -> NONTERM_stmt 
    | 55 -> NONTERM_stmt 
    | 56 -> NONTERM_con 
    | 57 -> NONTERM_con 
    | 58 -> NONTERM_con 
    | 59 -> NONTERM_con 
    | 60 -> NONTERM_con 
    | 61 -> NONTERM_con 
    | _ -> failwith "prodIdxToNonTerminal: bad production index"

let _fsyacc_endOfInputTag = 36 
let _fsyacc_tagOfErrorTerminal = 34

// This function gets the name of a token as a string
let token_to_string (t:token) = 
  match t with 
  | WHILE  -> "WHILE" 
  | VAR  -> "VAR" 
  | TRUE  -> "TRUE" 
  | STRUCT  -> "STRUCT" 
  | STRING _ -> "STRING" 
  | SEMICOLON  -> "SEMICOLON" 
  | RPAREN  -> "RPAREN" 
  | RETURN  -> "RETURN" 
  | RBRACE  -> "RBRACE" 
  | RBOX  -> "RBOX" 
  | PRINTF  -> "PRINTF" 
  | PLUS  -> "PLUS" 
  | MINUS  -> "MINUS" 
  | LPAREN  -> "LPAREN" 
  | LET  -> "LET" 
  | LESS  -> "LESS" 
  | LBRACE  -> "LBRACE" 
  | LBOX  -> "LBOX" 
  | INT _ -> "INT" 
  | IF  -> "IF" 
  | ID _ -> "ID" 
  | FUNC  -> "FUNC" 
  | FALSE  -> "FALSE" 
  | EQUAL  -> "EQUAL" 
  | EOF  -> "EOF" 
  | ELSE  -> "ELSE" 
  | DOT  -> "DOT" 
  | CSTRING  -> "CSTRING" 
  | COMMA  -> "COMMA" 
  | COLON  -> "COLON" 
  | CINT  -> "CINT" 
  | CBOOL  -> "CBOOL" 
  | ASTERISK  -> "ASTERISK" 
  | ASSIGN  -> "ASSIGN" 

// This function gets the data carried by a token as an object
let _fsyacc_dataOfToken (t:token) = 
  match t with 
  | WHILE  -> (null : System.Object) 
  | VAR  -> (null : System.Object) 
  | TRUE  -> (null : System.Object) 
  | STRUCT  -> (null : System.Object) 
  | STRING _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x 
  | SEMICOLON  -> (null : System.Object) 
  | RPAREN  -> (null : System.Object) 
  | RETURN  -> (null : System.Object) 
  | RBRACE  -> (null : System.Object) 
  | RBOX  -> (null : System.Object) 
  | PRINTF  -> (null : System.Object) 
  | PLUS  -> (null : System.Object) 
  | MINUS  -> (null : System.Object) 
  | LPAREN  -> (null : System.Object) 
  | LET  -> (null : System.Object) 
  | LESS  -> (null : System.Object) 
  | LBRACE  -> (null : System.Object) 
  | LBOX  -> (null : System.Object) 
  | INT _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x 
  | IF  -> (null : System.Object) 
  | ID _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x 
  | FUNC  -> (null : System.Object) 
  | FALSE  -> (null : System.Object) 
  | EQUAL  -> (null : System.Object) 
  | EOF  -> (null : System.Object) 
  | ELSE  -> (null : System.Object) 
  | DOT  -> (null : System.Object) 
  | CSTRING  -> (null : System.Object) 
  | COMMA  -> (null : System.Object) 
  | COLON  -> (null : System.Object) 
  | CINT  -> (null : System.Object) 
  | CBOOL  -> (null : System.Object) 
  | ASTERISK  -> (null : System.Object) 
  | ASSIGN  -> (null : System.Object) 
let _fsyacc_gotos = [| 0us; 65535us; 0us; 65535us; 2us; 65535us; 22us; 18us; 83us; 18us; 1us; 65535us; 135us; 136us; 3us; 65535us; 63us; 64us; 68us; 69us; 74us; 75us; 1us; 65535us; 83us; 84us; 1us; 65535us; 110us; 111us; 1us; 65535us; 71us; 72us; 7us; 65535us; 2us; 34us; 10us; 11us; 88us; 89us; 91us; 92us; 119us; 120us; 123us; 124us; 129us; 130us; 2us; 65535us; 13us; 14us; 135us; 5us; 4us; 65535us; 16us; 17us; 63us; 6us; 68us; 6us; 74us; 6us; 2us; 65535us; 22us; 23us; 83us; 7us; 2us; 65535us; 27us; 28us; 110us; 8us; 2us; 65535us; 32us; 33us; 71us; 9us; 1us; 65535us; 2us; 3us; 1us; 65535us; 0us; 1us; 26us; 65535us; 0us; 36us; 2us; 53us; 10us; 53us; 16us; 15us; 30us; 31us; 57us; 43us; 58us; 44us; 59us; 45us; 60us; 46us; 61us; 47us; 63us; 15us; 66us; 48us; 68us; 15us; 74us; 15us; 79us; 49us; 88us; 53us; 91us; 53us; 94us; 50us; 100us; 51us; 106us; 52us; 114us; 54us; 117us; 55us; 119us; 53us; 123us; 53us; 127us; 56us; 129us; 53us; 7us; 65535us; 2us; 10us; 10us; 10us; 88us; 10us; 91us; 10us; 119us; 10us; 123us; 10us; 129us; 10us; 7us; 65535us; 13us; 12us; 20us; 21us; 25us; 26us; 86us; 87us; 98us; 99us; 104us; 105us; 135us; 12us; |]
let _fsyacc_sparseGotoTableRowOffsets = [|0us; 1us; 2us; 5us; 7us; 11us; 13us; 15us; 17us; 25us; 28us; 33us; 36us; 39us; 42us; 44us; 46us; 73us; 81us; |]
let _fsyacc_stateToProdIdxsTableElements = [| 1us; 0us; 1us; 0us; 1us; 1us; 1us; 1us; 1us; 3us; 1us; 5us; 1us; 7us; 1us; 9us; 1us; 11us; 1us; 13us; 1us; 15us; 1us; 15us; 3us; 16us; 17us; 61us; 1us; 17us; 1us; 17us; 10us; 18us; 19us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 1us; 19us; 1us; 19us; 2us; 20us; 21us; 2us; 20us; 21us; 2us; 20us; 21us; 3us; 20us; 21us; 61us; 1us; 21us; 1us; 21us; 2us; 22us; 23us; 2us; 22us; 23us; 3us; 22us; 23us; 61us; 1us; 23us; 1us; 23us; 2us; 24us; 25us; 2us; 24us; 25us; 10us; 24us; 25us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 1us; 25us; 1us; 25us; 1us; 26us; 1us; 26us; 9us; 27us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 1us; 27us; 1us; 28us; 1us; 29us; 1us; 30us; 1us; 31us; 2us; 32us; 41us; 9us; 33us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 9us; 33us; 34us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 9us; 33us; 34us; 35us; 35us; 36us; 37us; 42us; 43us; 44us; 9us; 33us; 34us; 35us; 36us; 36us; 37us; 42us; 43us; 44us; 9us; 33us; 34us; 35us; 36us; 37us; 37us; 42us; 43us; 44us; 9us; 33us; 34us; 35us; 36us; 37us; 39us; 42us; 43us; 44us; 9us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 44us; 9us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 47us; 9us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 48us; 9us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 49us; 10us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 51us; 52us; 9us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 52us; 10us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 53us; 54us; 9us; 33us; 34us; 35us; 36us; 37us; 42us; 43us; 44us; 55us; 1us; 33us; 1us; 34us; 1us; 35us; 1us; 36us; 1us; 37us; 1us; 38us; 1us; 38us; 1us; 38us; 1us; 38us; 1us; 39us; 1us; 39us; 1us; 40us; 1us; 40us; 1us; 40us; 1us; 41us; 1us; 41us; 1us; 41us; 1us; 42us; 1us; 42us; 1us; 42us; 1us; 43us; 1us; 43us; 1us; 44us; 1us; 44us; 1us; 45us; 1us; 45us; 1us; 45us; 1us; 45us; 1us; 45us; 1us; 45us; 2us; 45us; 61us; 1us; 45us; 1us; 45us; 1us; 45us; 1us; 46us; 1us; 46us; 1us; 46us; 1us; 47us; 1us; 47us; 1us; 48us; 1us; 48us; 1us; 48us; 2us; 48us; 61us; 1us; 48us; 1us; 48us; 1us; 49us; 1us; 49us; 1us; 49us; 2us; 49us; 61us; 1us; 49us; 1us; 49us; 1us; 50us; 1us; 50us; 1us; 50us; 1us; 50us; 1us; 50us; 1us; 51us; 1us; 52us; 1us; 52us; 2us; 53us; 54us; 2us; 53us; 54us; 2us; 53us; 54us; 2us; 53us; 54us; 2us; 53us; 54us; 2us; 53us; 54us; 1us; 54us; 1us; 54us; 1us; 54us; 1us; 54us; 1us; 55us; 1us; 55us; 1us; 55us; 1us; 55us; 1us; 55us; 1us; 55us; 1us; 56us; 1us; 57us; 1us; 58us; 1us; 59us; 1us; 59us; 1us; 59us; 1us; 60us; 1us; 61us; 1us; 61us; |]
let _fsyacc_stateToProdIdxsTableRowOffsets = [|0us; 2us; 4us; 6us; 8us; 10us; 12us; 14us; 16us; 18us; 20us; 22us; 24us; 28us; 30us; 32us; 43us; 45us; 47us; 50us; 53us; 56us; 60us; 62us; 64us; 67us; 70us; 74us; 76us; 78us; 81us; 84us; 95us; 97us; 99us; 101us; 103us; 113us; 115us; 117us; 119us; 121us; 123us; 126us; 136us; 146us; 156us; 166us; 176us; 186us; 196us; 206us; 216us; 226us; 237us; 247us; 258us; 268us; 270us; 272us; 274us; 276us; 278us; 280us; 282us; 284us; 286us; 288us; 290us; 292us; 294us; 296us; 298us; 300us; 302us; 304us; 306us; 308us; 310us; 312us; 314us; 316us; 318us; 320us; 322us; 324us; 326us; 328us; 331us; 333us; 335us; 337us; 339us; 341us; 343us; 345us; 347us; 349us; 351us; 353us; 356us; 358us; 360us; 362us; 364us; 366us; 369us; 371us; 373us; 375us; 377us; 379us; 381us; 383us; 385us; 387us; 389us; 392us; 395us; 398us; 401us; 404us; 407us; 409us; 411us; 413us; 415us; 417us; 419us; 421us; 423us; 425us; 427us; 429us; 431us; 433us; 435us; 437us; 439us; 441us; 443us; |]
let _fsyacc_action_rows = 141
let _fsyacc_actionTableElements = [|8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 49152us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 0us; 49152us; 0us; 16387us; 0us; 16389us; 0us; 16391us; 0us; 16393us; 0us; 16395us; 0us; 16397us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 0us; 16399us; 2us; 16400us; 17us; 139us; 28us; 13us; 5us; 32768us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 0us; 16401us; 9us; 16402us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 28us; 16us; 32us; 58us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16403us; 1us; 32768us; 20us; 19us; 1us; 32768us; 29us; 20us; 5us; 32768us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 2us; 16404us; 17us; 139us; 28us; 22us; 1us; 16386us; 1us; 4us; 0us; 16405us; 1us; 32768us; 29us; 25us; 5us; 32768us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 2us; 16406us; 17us; 139us; 28us; 27us; 1us; 32768us; 20us; 24us; 0us; 16407us; 1us; 32768us; 29us; 30us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 9us; 16408us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 28us; 32us; 32us; 58us; 1us; 32768us; 20us; 29us; 0us; 16409us; 1us; 32768us; 24us; 35us; 0us; 16410us; 9us; 32768us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 24us; 37us; 26us; 77us; 32us; 58us; 0us; 16411us; 0us; 16412us; 0us; 16413us; 0us; 16414us; 0us; 16415us; 1us; 16416us; 16us; 71us; 7us; 16417us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 6us; 16418us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 5us; 16419us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 4us; 16420us; 13us; 74us; 17us; 79us; 23us; 61us; 26us; 77us; 3us; 16421us; 13us; 74us; 17us; 79us; 26us; 77us; 9us; 32768us; 6us; 67us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 9us; 32768us; 9us; 80us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 9us; 32768us; 5us; 95us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 9us; 32768us; 5us; 101us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 9us; 32768us; 5us; 107us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 10us; 32768us; 5us; 113us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 33us; 114us; 9us; 32768us; 5us; 115us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 9us; 32768us; 6us; 118us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 9us; 32768us; 6us; 128us; 11us; 57us; 12us; 59us; 13us; 74us; 15us; 60us; 17us; 79us; 23us; 61us; 26us; 77us; 32us; 58us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 1us; 32768us; 17us; 63us; 8us; 16390us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 1us; 32768us; 9us; 65us; 0us; 16422us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16423us; 8us; 16390us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 1us; 32768us; 9us; 70us; 0us; 16424us; 1us; 16396us; 20us; 29us; 1us; 32768us; 8us; 73us; 0us; 16425us; 8us; 16390us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 1us; 32768us; 6us; 76us; 0us; 16426us; 1us; 32768us; 20us; 78us; 0us; 16427us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16428us; 1us; 32768us; 20us; 82us; 1us; 32768us; 13us; 83us; 2us; 16386us; 1us; 4us; 6us; 16392us; 1us; 32768us; 6us; 85us; 1us; 32768us; 29us; 86us; 5us; 32768us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 2us; 32768us; 16us; 88us; 17us; 139us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 1us; 32768us; 8us; 90us; 0us; 16429us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 1us; 32768us; 8us; 93us; 0us; 16430us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16431us; 1us; 32768us; 20us; 97us; 1us; 32768us; 29us; 98us; 5us; 32768us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 2us; 32768us; 17us; 139us; 33us; 100us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16432us; 1us; 32768us; 20us; 103us; 1us; 32768us; 29us; 104us; 5us; 32768us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 2us; 32768us; 17us; 139us; 33us; 106us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16433us; 1us; 32768us; 20us; 109us; 1us; 32768us; 16us; 110us; 1us; 16394us; 20us; 24us; 1us; 32768us; 8us; 112us; 0us; 16434us; 0us; 16435us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 0us; 16436us; 1us; 32768us; 13us; 117us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 1us; 32768us; 16us; 119us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 1us; 32768us; 8us; 121us; 1us; 16437us; 25us; 122us; 1us; 32768us; 16us; 123us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 1us; 32768us; 8us; 125us; 0us; 16438us; 1us; 32768us; 13us; 127us; 8us; 32768us; 2us; 40us; 4us; 39us; 10us; 62us; 13us; 66us; 17us; 68us; 18us; 38us; 20us; 42us; 22us; 41us; 1us; 32768us; 16us; 129us; 16us; 16398us; 0us; 126us; 1us; 102us; 2us; 40us; 3us; 108us; 4us; 39us; 7us; 94us; 10us; 62us; 13us; 66us; 14us; 96us; 16us; 91us; 17us; 68us; 18us; 38us; 19us; 116us; 20us; 42us; 21us; 81us; 22us; 41us; 1us; 32768us; 8us; 131us; 0us; 16439us; 0us; 16440us; 0us; 16441us; 0us; 16442us; 5us; 16388us; 13us; 135us; 20us; 138us; 27us; 133us; 30us; 132us; 31us; 134us; 1us; 32768us; 6us; 137us; 0us; 16443us; 0us; 16444us; 1us; 32768us; 9us; 140us; 0us; 16445us; |]
let _fsyacc_actionTableRowOffsets = [|0us; 9us; 10us; 27us; 28us; 29us; 30us; 31us; 32us; 33us; 34us; 51us; 52us; 55us; 61us; 62us; 72us; 81us; 82us; 84us; 86us; 92us; 95us; 97us; 98us; 100us; 106us; 109us; 111us; 112us; 114us; 123us; 133us; 135us; 136us; 138us; 139us; 149us; 150us; 151us; 152us; 153us; 154us; 156us; 164us; 171us; 177us; 182us; 186us; 196us; 206us; 216us; 226us; 236us; 247us; 257us; 267us; 277us; 286us; 295us; 304us; 313us; 322us; 324us; 333us; 335us; 336us; 345us; 346us; 355us; 357us; 358us; 360us; 362us; 363us; 372us; 374us; 375us; 377us; 378us; 387us; 388us; 390us; 392us; 395us; 397us; 399us; 405us; 408us; 425us; 427us; 428us; 445us; 447us; 448us; 457us; 458us; 460us; 462us; 468us; 471us; 480us; 481us; 483us; 485us; 491us; 494us; 503us; 504us; 506us; 508us; 510us; 512us; 513us; 514us; 523us; 524us; 526us; 535us; 537us; 554us; 556us; 558us; 560us; 577us; 579us; 580us; 582us; 591us; 593us; 610us; 612us; 613us; 614us; 615us; 616us; 622us; 624us; 625us; 626us; 628us; |]
let _fsyacc_reductionSymbolCounts = [|1us; 1us; 0us; 1us; 0us; 1us; 0us; 1us; 0us; 1us; 0us; 1us; 0us; 1us; 0us; 2us; 1us; 3us; 1us; 3us; 4us; 6us; 3us; 5us; 3us; 5us; 2us; 2us; 1us; 1us; 1us; 1us; 1us; 3us; 3us; 3us; 3us; 3us; 4us; 3us; 3us; 4us; 4us; 3us; 4us; 10us; 3us; 3us; 7us; 7us; 5us; 2us; 4us; 7us; 11us; 7us; 1us; 1us; 1us; 3us; 1us; 3us; |]
let _fsyacc_productionToNonTerminalTable = [|0us; 1us; 2us; 2us; 3us; 3us; 4us; 4us; 5us; 5us; 6us; 6us; 7us; 7us; 8us; 8us; 9us; 9us; 10us; 10us; 11us; 11us; 12us; 12us; 13us; 13us; 14us; 15us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 16us; 17us; 17us; 17us; 17us; 17us; 17us; 17us; 17us; 17us; 17us; 17us; 18us; 18us; 18us; 18us; 18us; 18us; |]
let _fsyacc_immediateActions = [|65535us; 49152us; 65535us; 49152us; 16387us; 16389us; 16391us; 16393us; 16395us; 16397us; 65535us; 16399us; 65535us; 65535us; 16401us; 65535us; 65535us; 16403us; 65535us; 65535us; 65535us; 65535us; 65535us; 16405us; 65535us; 65535us; 65535us; 65535us; 16407us; 65535us; 65535us; 65535us; 65535us; 16409us; 65535us; 16410us; 65535us; 16411us; 16412us; 16413us; 16414us; 16415us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16422us; 65535us; 16423us; 65535us; 65535us; 16424us; 65535us; 65535us; 16425us; 65535us; 65535us; 16426us; 65535us; 16427us; 65535us; 16428us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16429us; 65535us; 65535us; 16430us; 65535us; 16431us; 65535us; 65535us; 65535us; 65535us; 65535us; 16432us; 65535us; 65535us; 65535us; 65535us; 65535us; 16433us; 65535us; 65535us; 65535us; 65535us; 16434us; 16435us; 65535us; 16436us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16438us; 65535us; 65535us; 65535us; 65535us; 65535us; 16439us; 16440us; 16441us; 16442us; 65535us; 65535us; 16443us; 16444us; 65535us; 16445us; |]
let _fsyacc_reductions ()  =    [| 
# 343 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
                      raise (FSharp.Text.Parsing.Accept(Microsoft.FSharp.Core.Operators.box _1))
                   )
                 : '_startterm));
# 352 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : stmt list)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
                      raise (FSharp.Text.Parsing.Accept(Microsoft.FSharp.Core.Operators.box _1))
                   )
                 : '_startprog));
# 361 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 55 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( None )
                   )
# 55 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'option_VAR_));
# 371 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 57 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = () in
                         ( Some x )
                   )
# 57 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'option_VAR_));
# 382 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 62 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( [] )
                   )
# 62 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_con__));
# 392 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_con_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 64 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( x )
                   )
# 64 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_con__));
# 404 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 69 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( [] )
                   )
# 69 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_expr__));
# 414 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_expr_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 71 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( x )
                   )
# 71 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_expr__));
# 426 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 76 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( [] )
                   )
# 76 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_param__));
# 436 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_param_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 78 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( x )
                   )
# 78 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_param__));
# 448 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 83 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( [] )
                   )
# 83 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con___));
# 458 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 85 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( x )
                   )
# 85 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con___));
# 470 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 90 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( [] )
                   )
# 90 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr___));
# 480 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 92 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( x )
                   )
# 92 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr___));
# 492 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 97 "/home/zhxchen17/punklang/parser/parse.fsy"
                              ( [] )
                   )
# 97 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'list_stmt_));
# 502 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'stmt)) in
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 99 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, xs) = (_1, _2) in
                         ( x :: xs )
                   )
# 99 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'list_stmt_));
# 515 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 104 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( [ x ] )
                   )
# 104 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_con_));
# 527 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_con_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 107 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, _2, xs) = (_1, (), _3) in
                         ( x :: xs )
                   )
# 107 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_con_));
# 540 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 112 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                         ( [ x ] )
                   )
# 112 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_expr_));
# 552 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_expr_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 115 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, _2, xs) = (_1, (), _3) in
                         ( x :: xs )
                   )
# 115 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_expr_));
# 565 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'option_VAR_)) in
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _4 = (let data = parseState.GetInput(4) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 120 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (mut, x, _3, ty) = (_1, _2, (), _4) in
                     let x =                                                ( (Var.newvar (Some x), ty) ) in
                         ( [ x ] )
                   )
# 120 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_param_));
# 580 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'option_VAR_)) in
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _4 = (let data = parseState.GetInput(4) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            let _6 = (let data = parseState.GetInput(6) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_param_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 124 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (mut, x, _3, ty, _2, xs) = (_1, _2, (), _4, (), _6) in
                     let x =                                                ( (Var.newvar (Some x), ty) ) in
                         ( x :: xs )
                   )
# 124 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_param_));
# 596 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 130 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, _2, y) = (_1, (), _3) in
                     let x =     ( (x, y) ) in
                         ( [ x ] )
                   )
# 130 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__));
# 610 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            let _5 = (let data = parseState.GetInput(5) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 134 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, _2_inlined1, y, _2, xs) = (_1, (), _3, (), _5) in
                     let x =
                       let _2 = _2_inlined1 in
                           ( (x, y) )
                     in
                         ( x :: xs )
                   )
# 134 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_con__));
# 628 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 143 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, _2, y) = (_1, (), _3) in
                     let x =     ( (x, y) ) in
                         ( [ x ] )
                   )
# 143 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__));
# 642 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _5 = (let data = parseState.GetInput(5) in (Microsoft.FSharp.Core.Operators.unbox data : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 147 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (x, _2_inlined1, y, _2, xs) = (_1, (), _3, (), _5) in
                     let x =
                       let _2 = _2_inlined1 in
                           ( (x, y) )
                     in
                         ( x :: xs )
                   )
# 147 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr__));
# 660 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 156 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (s, _2) = (_1, ()) in
                                             ( s )
                   )
# 156 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : stmt list));
# 672 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 161 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e, _2) = (_1, ()) in
                                       ( e )
                   )
# 161 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : expr));
# 684 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : int)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 166 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let i = _1 in
                                ( Texpr_int i )
                   )
# 166 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 696 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 169 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let s = _1 in
                                    ( Texpr_string s )
                   )
# 169 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 708 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 172 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let _1 = () in
                              ( Texpr_bool true )
                   )
# 172 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 719 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 175 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let _1 = () in
                               ( Texpr_bool false )
                   )
# 175 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 730 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 178 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                               ( Texpr_var (-1, Some x) )
                   )
# 178 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 742 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 181 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e0, _2, e1) = (_1, (), _3) in
                                                   ( Texpr_op (Top_add, [e0; e1]) )
                   )
# 181 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 755 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 184 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e0, _2, e1) = (_1, (), _3) in
                                                        ( Texpr_op (Top_multiply, [e0; e1]) )
                   )
# 184 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 768 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 187 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e0, _2, e1) = (_1, (), _3) in
                                                     ( Texpr_op (Top_minus, [e0; e1]) )
                   )
# 187 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 781 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 190 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e0, _2, e1) = (_1, (), _3) in
                                                    ( Texpr_op (Top_lt, [e0; e1]) )
                   )
# 190 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 794 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 193 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e0, _2, e1) = (_1, (), _3) in
                                                     ( Texpr_op (Top_equal, [e0; e1]) )
                   )
# 193 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 807 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_expr__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 196 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, _2, xs, _4) = ((), (), _3, ()) in
                     let el =     ( xs ) in
                                                                              ( Texpr_op (Top_cprintf, el) )
                   )
# 196 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 820 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 200 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, e, _3) = ((), _2, ()) in
                                                 ( e )
                   )
# 200 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 832 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_expr__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 203 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, xs, _3) = ((), _2, ()) in
                     let el =     ( xs ) in
                                                                      ( Texpr_array el )
                   )
# 203 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 845 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_expr___)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 207 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (c, _2, xs, _4) = (_1, (), _3, ()) in
                     let xel =     ( xs ) in
                                                                                                              ( Texpr_ctor (Tcon_named (-1, Some c), xel) )
                   )
# 207 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 859 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_expr__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 211 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (caller, _2, xs, _4) = (_1, (), _3, ()) in
                     let args =     ( xs ) in
                                                                                           ( Texpr_app(caller, args) )
                   )
# 211 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 873 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 215 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e0, _2, field) = (_1, (), _3) in
                                                    ( Texpr_field (e0, (-1, Some field)) )
                   )
# 215 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 886 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 218 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e, _2, i, _4) = (_1, (), _3, ()) in
                                                        ( Texpr_op (Top_idx, [e; i]) )
                   )
# 218 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'expr));
# 899 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _4 = (let data = parseState.GetInput(4) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_param__)) in
            let _7 = (let data = parseState.GetInput(7) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            let _9 = (let data = parseState.GetInput(9) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 223 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, fname, _3, xs, _5, _6, tr, _8, sl, _10) = ((), _2, (), _4, (), (), _7, (), _9, ()) in
                     let args =     ( xs ) in
                                                                                                                                                 ( Tstmt_decl (Var.newvar (Some fname), Timm, (Some (Tcon_arrow (List.map (fun (_, x) -> x) args, tr))), Texpr_func (args, tr, Tstmt_blk sl)) )
                   )
# 223 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 915 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 227 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, stmts, _3) = ((), _2, ()) in
                                                            ( Tstmt_blk stmts )
                   )
# 227 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 927 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 230 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, e, _3) = ((), _2, ()) in
                                                     ( Tstmt_ret e )
                   )
# 230 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 939 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _4 = (let data = parseState.GetInput(4) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            let _6 = (let data = parseState.GetInput(6) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 233 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, x, _3, ty, _5, e, _7) = ((), _2, (), _4, (), _6, ()) in
                                                                                   ( Tstmt_decl (Var.newvar (Some x), Timm, Some ty, e) )
                   )
# 233 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 953 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _4 = (let data = parseState.GetInput(4) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            let _6 = (let data = parseState.GetInput(6) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 236 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, x, _3, ty, _5, e, _7) = ((), _2, (), _4, (), _6, ()) in
                                                                                   ( Tstmt_decl (Var.newvar (Some x), Tmut, Some ty, e) )
                   )
# 236 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 967 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            let _4 = (let data = parseState.GetInput(4) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_separated_pair_ID_COLON_con___)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 239 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, sname, _3, xs, _5) = ((), _2, (), _4, ()) in
                     let xcl =     ( xs ) in
                                                                                                                         ( let v = Var.newvar (Some sname) in Tstmt_struct (v, xcl) )
                   )
# 239 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 981 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 243 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (e, _2) = (_1, ()) in
                                             ( Tstmt_expr e )
                   )
# 243 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 993 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 246 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (lval, _2, e, _4) = (_1, (), _3, ()) in
                                                                  ( Tstmt_asgn(lval, e) )
                   )
# 246 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 1006 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _6 = (let data = parseState.GetInput(6) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 249 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, _2, e, _4, _5, sl0, _7) = ((), (), _3, (), (), _6, ()) in
                                                                                        ( Tstmt_if (e, Tstmt_blk sl0, Tstmt_blk []) )
                   )
# 249 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 1019 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _6 = (let data = parseState.GetInput(6) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            let _10 = (let data = parseState.GetInput(10) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 252 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, _2, e, _4, _5, sl0, _7, _8, _9, sl1, _11) = ((), (), _3, (), (), _6, (), (), (), _10, ()) in
                                                                                                                                ( Tstmt_if (e, Tstmt_blk sl0, Tstmt_blk sl1) )
                   )
# 252 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 1033 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _3 = (let data = parseState.GetInput(3) in (Microsoft.FSharp.Core.Operators.unbox data : 'expr)) in
            let _6 = (let data = parseState.GetInput(6) in (Microsoft.FSharp.Core.Operators.unbox data : 'list_stmt_)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 255 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, _2, e, _4, _5, sl, _7) = ((), (), _3, (), (), _6, ()) in
                                                                                          ( Tstmt_while (e, Tstmt_blk sl) )
                   )
# 255 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'stmt));
# 1046 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 260 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let _1 = () in
                              ( Tcon_int )
                   )
# 260 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'con));
# 1057 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 263 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let _1 = () in
                                 ( Tcon_string )
                   )
# 263 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'con));
# 1068 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 266 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let _1 = () in
                               ( Tcon_bool )
                   )
# 266 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'con));
# 1079 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _2 = (let data = parseState.GetInput(2) in (Microsoft.FSharp.Core.Operators.unbox data : 'loption_separated_nonempty_list_COMMA_con__)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 269 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (_1, xs, _3) = ((), _2, ()) in
                     let cl =     ( xs ) in
                                                                        ( Tcon_prod (cl, None) )
                   )
# 269 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'con));
# 1092 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : string)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 273 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let x = _1 in
                                ( Tcon_named (-1, Some x) )
                   )
# 273 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'con));
# 1104 "parse.fs"
        (fun (parseState : FSharp.Text.Parsing.IParseState) ->
            let _1 = (let data = parseState.GetInput(1) in (Microsoft.FSharp.Core.Operators.unbox data : 'con)) in
            Microsoft.FSharp.Core.Operators.box
                (
                   (
# 276 "/home/zhxchen17/punklang/parser/parse.fsy"
                          let (c, _2, _3) = (_1, (), ()) in
                                             ( Tcon_array c )
                   )
# 276 "/home/zhxchen17/punklang/parser/parse.fsy"
                 : 'con));
|]
# 1117 "parse.fs"
let tables () : FSharp.Text.Parsing.Tables<_> = 
  { reductions= _fsyacc_reductions ();
    endOfInputTag = _fsyacc_endOfInputTag;
    tagOfToken = tagOfToken;
    dataOfToken = _fsyacc_dataOfToken; 
    actionTableElements = _fsyacc_actionTableElements;
    actionTableRowOffsets = _fsyacc_actionTableRowOffsets;
    stateToProdIdxsTableElements = _fsyacc_stateToProdIdxsTableElements;
    stateToProdIdxsTableRowOffsets = _fsyacc_stateToProdIdxsTableRowOffsets;
    reductionSymbolCounts = _fsyacc_reductionSymbolCounts;
    immediateActions = _fsyacc_immediateActions;
    gotos = _fsyacc_gotos;
    sparseGotoTableRowOffsets = _fsyacc_sparseGotoTableRowOffsets;
    tagOfErrorTerminal = _fsyacc_tagOfErrorTerminal;
    parseError = (fun (ctxt:FSharp.Text.Parsing.ParseErrorContext<_>) -> 
                              match parse_error_rich with 
                              | Some f -> f ctxt
                              | None -> parse_error ctxt.Message);
    numTerminals = 37;
    productionToNonTerminalTable = _fsyacc_productionToNonTerminalTable  }
let engine lexer lexbuf startState = (tables ()).Interpret(lexer, lexbuf, startState)
let term lexer lexbuf : expr =
    Microsoft.FSharp.Core.Operators.unbox ((tables ()).Interpret(lexer, lexbuf, 0))
let prog lexer lexbuf : stmt list =
    Microsoft.FSharp.Core.Operators.unbox ((tables ()).Interpret(lexer, lexbuf, 2))
