1 module List = ListLabels
6 /* an array type and an array variable */ \
8 type arrtype = array of int \
17 let open Tiger.Parser.Token in
19 TYPE; ID "arrtype"; EQ; ARRAY; OF; ID "int";
20 VAR; ID "arr1"; COLON; ID "arrtype"; ASSIGN;
21 ID "arrtype"; LBRACK; INT 10; RBRACK; OF; INT 0;
27 ("test_01", code, tokens)
32 /* arr1 is valid since expression 0 is int = myint */ \
35 type arrtype = array of myint \
44 let open Tiger.Parser.Token in
46 TYPE; ID "myint"; EQ; ID "int";
47 TYPE; ID "arrtype"; EQ; ARRAY; OF; ID "myint";
48 VAR; ID "arr1"; COLON; ID "arrtype"; ASSIGN;
49 ID "arrtype"; LBRACK; INT 10; RBRACK; OF; INT 0;
55 ("test_02", code, tokens)
60 /* a record type and a record variable */ \
66 var rec1 : rectype := \
72 rec1.name := \"Somebody\"; \
78 let open Tiger.Parser.Token in
80 TYPE; ID "rectype"; EQ;
81 LBRACE; ID "name"; COLON; ID "string";
82 COMMA; ID "age"; COLON; ID "int";
84 VAR; ID "rec1"; COLON; ID "rectype"; ASSIGN;
86 LBRACE; ID "name"; EQ; STRING "Nobody";
87 COMMA; ID "age"; EQ; INT 1000;
90 ID "rec1"; DOT; ID "name"; ASSIGN; STRING "Somebody"; SEMICOLON;
95 ("test_03", code, tokens)
97 let tokens_of_code code =
98 let lexbuf = Lexing.from_string code in
100 match Tiger.Lexer.token lexbuf with
101 | Tiger.Parser.Token.EOF -> []
102 | token -> token :: tokens ()
113 let bar_sep = String.make 80 '-' in
114 let bar_end = String.make 80 '=' in
115 List.iter tests ~f:(fun (name, code, tokens_expected) ->
117 printf "%s\n==> Test %S: " bar_sep name;
118 let tokens_emitted = tokens_of_code code in
120 assert (tokens_emitted = tokens_expected);
122 with Assert_failure _ ->
123 let tokens_to_string tokens =
124 String.concat "; " (List.map Tiger.Parser.Token.to_string tokens)
127 "ERROR\n Expected: %s\n Emitted : %s\n\n"
128 (tokens_to_string tokens_expected)
129 (tokens_to_string tokens_emitted)
132 print_endline bar_end;