equal
deleted
inserted
replaced
41 #include <list> |
41 #include <list> |
42 #include <string> |
42 #include <string> |
43 #include <string.h> |
43 #include <string.h> |
44 #include <strings.h> |
44 #include <strings.h> |
45 |
45 |
46 |
46 /* |
47 |
47 static inline symbol_c * FIRST_(symbol_c *symbol1, symbol_c *symbol2) { |
|
48 if (symbol1->first_file == symbol2->first_file) return symbol1; |
|
49 |
|
50 if (symbol1->first_line < symbol2->first_line) return symbol1; |
|
51 if (symbol1->first_line > symbol2->first_line) return symbol2; |
|
52 if (symbol1->first_column < symbol2->first_column) return symbol1; |
|
53 if (symbol1->first_column > symbol2->first_column) return symbol2; |
|
54 return symbol1; |
|
55 } |
|
56 |
|
57 #define FIRST_(symbol1, symbol2) (((symbol1)->last_file == (symbol2)->first_file) ? (symbol1) : \ |
|
58 ((symbol1)->first_file == (symbol2)->last_file) ? (symbol2) : \ |
|
59 ((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ |
|
60 ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ |
|
61 ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ |
|
62 ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) : \ |
|
63 (symbol1)) |
|
64 */ |
48 #define FIRST_(symbol1, symbol2) (((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ |
65 #define FIRST_(symbol1, symbol2) (((symbol1)->first_line < (symbol2)->first_line) ? (symbol1) : \ |
49 ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ |
66 ((symbol1)->first_line > (symbol2)->first_line) ? (symbol2) : \ |
50 ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ |
67 ((symbol1)->first_column < (symbol2)->first_column) ? (symbol1) : \ |
51 ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) : \ |
68 ((symbol1)->first_column > (symbol2)->first_column) ? (symbol2) : \ |
52 (symbol1)) |
69 (symbol1)) |
56 ((symbol1)->last_column < (symbol2)->last_column) ? (symbol2) : \ |
73 ((symbol1)->last_column < (symbol2)->last_column) ? (symbol2) : \ |
57 ((symbol1)->last_column > (symbol2)->last_column) ? (symbol1) : \ |
74 ((symbol1)->last_column > (symbol2)->last_column) ? (symbol1) : \ |
58 (symbol1)) |
75 (symbol1)) |
59 |
76 |
60 #define STAGE3_ERROR(symbol1, symbol2, msg) { \ |
77 #define STAGE3_ERROR(symbol1, symbol2, msg) { \ |
61 fprintf(stderr, "semantic error between (%d:%d) and (%d:%d): %s\n", \ |
78 fprintf(stderr, "%s:(%d:%d) .. %s(%d:%d): %s\n", \ |
62 FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \ |
79 FIRST_(symbol1,symbol2)->first_file, FIRST_(symbol1,symbol2)->first_line, FIRST_(symbol1,symbol2)->first_column, \ |
63 LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, \ |
80 LAST_(symbol1,symbol2) ->last_file, LAST_(symbol1,symbol2) ->last_line, LAST_(symbol1,symbol2) ->last_column, \ |
64 msg); \ |
81 msg); \ |
65 il_error = true; \ |
82 il_error = true; \ |
66 error_found = true; \ |
83 error_found = true; \ |
67 } |
84 } |
68 |
85 |