X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=tiger%2Fsrc%2Flib%2Ftiger%2Ftiger_parser.mly;h=a415ae7f579280b3741eaa911c7efd97941dbd7a;hb=3fbeb7c1c3b7a429f25e6e53a96b6884bce2d583;hp=2cd530db084d75f4ebd43aa69de44653bef67a0a;hpb=0e2c715d15688b48aba534d8ab9c3a2aec918752;p=tiger.ml.git diff --git a/tiger/src/lib/tiger/tiger_parser.mly b/tiger/src/lib/tiger/tiger_parser.mly index 2cd530d..a415ae7 100644 --- a/tiger/src/lib/tiger/tiger_parser.mly +++ b/tiger/src/lib/tiger/tiger_parser.mly @@ -188,36 +188,32 @@ decs: } dec: - | tydec {$1} - | vardec {$1} - | fundec {$1} - -fundec: - | FUNCTION ID LPAREN RPAREN EQ exp + /* Tydec */ + | TYPE ID EQ ID { - let id = $2 in - let exp = $6 in - sprintf "fundec[%s, arguments[], exp[%s]]" id exp + let type_id_new = $2 in + let type_id_orig = $4 in + sprintf "tydec_alias[from[%s], to[%s]]" type_id_new type_id_orig } - | FUNCTION ID LPAREN tyfields RPAREN EQ exp + | TYPE ID EQ LBRACE RBRACE { - let id = $2 in - let tyfields = $4 in - let exp = $7 in - sprintf "fundec[%s, arguments[%s], exp[%s]]" id tyfields exp + let type_id = $2 in + sprintf "tydec_empty_record[%s]" type_id } - | FUNCTION ID LPAREN tyfields RPAREN COLON ID EQ exp + | TYPE ID EQ LBRACE tyfields RBRACE { - let id = $2 in - let tyfields = $4 in - let type_id = $7 in - let exp = $9 in - sprintf - "fundec[%s, tyfields[%s], type_id[%s], exp[%s]]" - id tyfields type_id exp + let type_id = $2 in + let tyfields = $5 in + sprintf "tydec_record[%s, fields[%s]]" type_id tyfields + } + | TYPE ID EQ ARRAY OF ID + { + let type_id = $2 in + let element_type_id = $6 in + sprintf "tydec_array[%s, elements_of_type[%s]]" type_id element_type_id } -vardec: + /* Vardec */ | VAR ID ASSIGN exp { let id = $2 in @@ -232,29 +228,29 @@ vardec: sprintf "vardec[%s, type_id[%s], exp[%s]]" id type_id exp } -tydec: - | TYPE ID EQ ID - { - let type_id_new = $2 in - let type_id_orig = $4 in - sprintf "tydec_alias[from[%s], to[%s]]" type_id_new type_id_orig - } - | TYPE ID EQ LBRACE RBRACE + /* Fundec */ + | FUNCTION ID LPAREN RPAREN EQ exp { - let type_id = $2 in - sprintf "tydec_empty_record[%s]" type_id + let id = $2 in + let exp = $6 in + sprintf "fundec[%s, arguments[], exp[%s]]" id exp } - | TYPE ID EQ LBRACE tyfields RBRACE + | FUNCTION ID LPAREN tyfields RPAREN EQ exp { - let type_id = $2 in - let tyfields = $5 in - sprintf "tydec_record[%s, fields[%s]]" type_id tyfields + let id = $2 in + let tyfields = $4 in + let exp = $7 in + sprintf "fundec[%s, arguments[%s], exp[%s]]" id tyfields exp } - | TYPE ID EQ ARRAY OF ID + | FUNCTION ID LPAREN tyfields RPAREN COLON ID EQ exp { - let type_id = $2 in - let element_type_id = $6 in - sprintf "tydec_array[%s, elements_of_type[%s]]" type_id element_type_id + let id = $2 in + let tyfields = $4 in + let type_id = $7 in + let exp = $9 in + sprintf + "fundec[%s, tyfields[%s], type_id[%s], exp[%s]]" + id tyfields type_id exp } tyfields: