X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=tiger%2Fsrc%2Flib%2Ftiger%2Ftiger_parser.mly;fp=tiger%2Fsrc%2Flib%2Ftiger%2Ftiger_parser.mly;h=2cd530db084d75f4ebd43aa69de44653bef67a0a;hb=0e2c715d15688b48aba534d8ab9c3a2aec918752;hp=7ab644aeb671b251660c8256b52e95f2c8d8a34d;hpb=e7dfac93cf68329500935d8ebd59853992707d7d;p=tiger.ml.git diff --git a/tiger/src/lib/tiger/tiger_parser.mly b/tiger/src/lib/tiger/tiger_parser.mly index 7ab644a..2cd530d 100644 --- a/tiger/src/lib/tiger/tiger_parser.mly +++ b/tiger/src/lib/tiger/tiger_parser.mly @@ -233,32 +233,28 @@ vardec: } tydec: - | TYPE ID EQ ty + | TYPE ID EQ ID { - let type_id = $2 in - let ty = $4 in - sprintf "tydec[%s, %s]" type_id ty - } - -ty: - | ID - { - let type_id = $1 in - sprintf "type[type_id[%S]]" type_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 } - | LBRACE RBRACE + | TYPE ID EQ LBRACE RBRACE { - "record[]" + let type_id = $2 in + sprintf "tydec_empty_record[%s]" type_id } - | LBRACE tyfields RBRACE + | TYPE ID EQ LBRACE tyfields RBRACE { - let tyfields = $2 in - sprintf "record[%s]" tyfields + let type_id = $2 in + let tyfields = $5 in + sprintf "tydec_record[%s, fields[%s]]" type_id tyfields } - | ARRAY OF ID + | TYPE ID EQ ARRAY OF ID { - let type_id = $3 in - sprintf "array_of_type[%s]" type_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 } tyfields: