From: Siraaj Khandkar Date: Mon, 28 May 2018 18:26:33 +0000 (-0400) Subject: Combine declaration sub-rules X-Git-Url: https://git.xandkar.net/?p=tiger.ml.git;a=commitdiff_plain;h=3fbeb7c1c3b7a429f25e6e53a96b6884bce2d583 Combine declaration sub-rules --- 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: