Browse Source

Bug correction in string handling

Phyks (Lucas Verney) 5 years ago
parent
commit
c6be1b4989
14 changed files with 2758 additions and 1568 deletions
  1. 0
    3
      TODO
  2. 957
    907
      compiler.annot
  3. BIN
      compiler.cmi
  4. BIN
      compiler.cmo
  5. 1
    1
      compiler.ml
  6. 1468
    389
      lexer.annot
  7. BIN
      lexer.cmi
  8. BIN
      lexer.cmo
  9. 316
    266
      lexer.ml
  10. 15
    1
      lexer.mll
  11. BIN
      main.cmi
  12. BIN
      main.cmo
  13. BIN
      minic++
  14. 1
    1
      tests/exec/string.s

+ 0
- 3
TODO View File

@@ -3,6 +3,3 @@
3 3
 * Pointeurs
4 4
 * Fonctions
5 5
 * Classes
6
-
7
-Tests :
8
-* string.cpp (représentation hexa)

+ 957
- 907
compiler.annot
File diff suppressed because it is too large
View File


BIN
compiler.cmi View File


BIN
compiler.cmo View File


+ 1
- 1
compiler.ml View File

@@ -174,7 +174,7 @@ let mips_expr_string locals x y = match y with
174 174
                     ++ li v0 4
175 175
                     ++ syscall;
176 176
                 data = x.data
177
-                    ++ label ("string_"^(string_of_int !nb_string)) ++ asciiz s;
177
+                    ++ label ("string_"^(string_of_int !nb_string)) ++ asciiz ("\""^(String.escaped s)^"\"");
178 178
             }
179 179
     | ATExpr e ->
180 180
             let mips_for_expr = mips_expr locals e in

+ 1468
- 389
lexer.annot
File diff suppressed because it is too large
View File


BIN
lexer.cmi View File


BIN
lexer.cmo View File


+ 316
- 266
lexer.ml View File

@@ -38,23 +38,26 @@
38 38
         lexbuf.lex_curr_p <- 
39 39
             { pos with pos_lnum = pos.pos_lnum + 1; pos_bol = pos.pos_cnum }
40 40
 
41
-# 42 "lexer.ml"
41
+    let localstring = ref ""
42
+
43
+# 44 "lexer.ml"
42 44
 let __ocaml_lex_tables = {
43 45
   Lexing.lex_base = 
44
-   "\000\000\213\255\214\255\094\000\174\000\184\000\210\000\221\255\
46
+   "\000\000\213\255\214\255\215\255\078\000\088\000\112\000\221\255\
45 47
     \222\255\224\255\225\255\226\255\227\255\229\255\230\255\233\255\
46
-    \235\255\195\000\020\000\003\000\031\000\032\000\033\000\001\000\
47
-    \117\000\200\000\029\001\004\000\254\255\138\000\134\000\146\000\
48
-    \138\000\131\000\149\000\149\000\064\000\191\000\147\000\142\000\
49
-    \139\000\139\000\154\000\168\000\173\000\162\000\210\000\255\255\
50
-    \104\001\179\001\215\000\202\000\164\000\191\000\189\000\227\000\
51
-    \252\255\244\000\237\000\251\255\249\255\250\255\248\255\247\255\
48
+    \235\255\108\000\020\000\003\000\031\000\032\000\033\000\001\000\
49
+    \020\000\103\000\192\000\004\000\254\255\041\000\037\000\049\000\
50
+    \041\000\034\000\052\000\053\000\064\000\095\000\051\000\046\000\
51
+    \043\000\043\000\057\000\071\000\076\000\065\000\113\000\255\255\
52
+    \011\001\086\001\118\000\104\000\094\000\095\000\118\000\120\000\
53
+    \252\255\137\000\130\000\251\255\249\255\250\255\248\255\247\255\
52 54
     \246\255\245\255\223\255\243\255\241\255\240\255\228\255\239\255\
53
-    \254\001\021\002\036\002\215\255\047\002\136\002\216\002\239\002\
54
-    \078\001\253\255\254\255\043\001\255\255\082\001\254\255\255\255\
55
+    \161\001\184\001\199\001\014\002\247\255\248\255\108\002\254\255\
56
+    \255\255\095\002\250\255\251\255\252\255\253\255\181\002\249\255\
57
+    \241\000\253\255\254\255\192\000\255\255\240\000\254\255\255\255\
55 58
     ";
56 59
   Lexing.lex_backtrk = 
57
-   "\255\255\255\255\255\255\042\000\037\000\036\000\035\000\255\255\
60
+   "\255\255\255\255\255\255\255\255\037\000\036\000\035\000\255\255\
58 61
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
59 62
     \255\255\019\000\018\000\013\000\011\000\023\000\017\000\024\000\
60 63
     \042\000\021\000\035\000\002\000\255\255\042\000\255\255\255\255\
@@ -63,11 +66,12 @@ let __ocaml_lex_tables = {
63 66
     \035\000\035\000\255\255\255\255\255\255\255\255\255\255\255\255\
64 67
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
65 68
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
66
-    \255\255\038\000\039\000\255\255\255\255\255\255\255\255\255\255\
69
+    \255\255\038\000\039\000\255\255\255\255\255\255\008\000\255\255\
70
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
67 71
     \255\255\255\255\255\255\001\000\255\255\255\255\255\255\255\255\
68 72
     ";
69 73
   Lexing.lex_default = 
70
-   "\001\000\000\000\000\000\255\255\255\255\255\255\255\255\000\000\
74
+   "\001\000\000\000\000\000\000\000\255\255\255\255\255\255\000\000\
71 75
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
72 76
     \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
73 77
     \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
@@ -76,8 +80,9 @@ let __ocaml_lex_tables = {
76 80
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
77 81
     \000\000\255\255\255\255\000\000\000\000\000\000\000\000\000\000\
78 82
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
79
-    \255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
80
-    \082\000\000\000\000\000\255\255\000\000\086\000\000\000\000\000\
83
+    \255\255\255\255\255\255\076\000\000\000\000\000\255\255\000\000\
84
+    \000\000\255\255\000\000\000\000\000\000\000\000\255\255\000\000\
85
+    \090\000\000\000\000\000\255\255\000\000\094\000\000\000\000\000\
81 86
     ";
82 87
   Lexing.lex_trans = 
83 88
    "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -95,101 +100,91 @@ let __ocaml_lex_tables = {
95 100
     \037\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
96 101
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
97 102
     \006\000\006\000\006\000\026\000\006\000\006\000\006\000\006\000\
98
-    \006\000\006\000\006\000\008\000\024\000\007\000\077\000\077\000\
99
-    \075\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
100
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
101
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
102
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
103
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
104
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
105
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
106
-    \077\000\077\000\076\000\077\000\077\000\077\000\077\000\077\000\
107
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
108
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
109
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
110
-    \077\000\077\000\077\000\077\000\077\000\077\000\004\000\004\000\
103
+    \006\000\006\000\006\000\008\000\024\000\007\000\004\000\004\000\
111 104
     \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
112 105
     \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
113
-    \071\000\062\000\061\000\030\000\031\000\032\000\033\000\060\000\
114
-    \034\000\035\000\036\000\038\000\039\000\040\000\041\000\042\000\
115
-    \002\000\070\000\006\000\006\000\006\000\006\000\006\000\006\000\
116
-    \006\000\006\000\006\000\006\000\043\000\044\000\045\000\046\000\
117
-    \047\000\051\000\057\000\006\000\006\000\006\000\006\000\006\000\
106
+    \062\000\061\000\030\000\031\000\032\000\033\000\060\000\034\000\
107
+    \035\000\071\000\036\000\038\000\039\000\040\000\041\000\042\000\
118 108
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
109
+    \006\000\006\000\070\000\043\000\044\000\045\000\046\000\047\000\
110
+    \051\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
119 111
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
120
-    \006\000\006\000\006\000\006\000\006\000\053\000\054\000\052\000\
121
-    \072\000\006\000\055\000\006\000\006\000\006\000\006\000\006\000\
122 112
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
113
+    \006\000\006\000\006\000\053\000\057\000\052\000\054\000\006\000\
114
+    \072\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
123 115
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
124 116
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
125
-    \006\000\006\000\006\000\006\000\006\000\006\000\006\000\056\000\
126
-    \058\000\059\000\084\000\000\000\087\000\000\000\006\000\006\000\
117
+    \006\000\006\000\006\000\055\000\056\000\058\000\059\000\092\000\
127 118
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
119
+    \006\000\006\000\095\000\000\000\000\000\000\000\000\000\000\000\
120
+    \002\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
128 121
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
129 122
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
130
-    \083\000\000\000\000\000\000\000\006\000\000\000\006\000\006\000\
123
+    \006\000\006\000\006\000\091\000\000\000\000\000\000\000\006\000\
124
+    \000\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
131 125
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
126
+    \006\000\006\000\006\000\006\000\048\000\006\000\006\000\006\000\
132 127
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
133
-    \006\000\048\000\006\000\006\000\006\000\006\000\006\000\006\000\
128
+    \006\000\006\000\006\000\006\000\006\000\000\000\000\000\000\000\
129
+    \000\000\000\000\000\000\000\000\006\000\006\000\006\000\006\000\
134 130
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
135
-    \006\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\
136
-    \000\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
137 131
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
132
+    \006\000\006\000\006\000\006\000\006\000\006\000\000\000\000\000\
133
+    \000\000\000\000\006\000\000\000\006\000\006\000\006\000\049\000\
138 134
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
139
-    \006\000\006\000\006\000\000\000\000\000\000\000\000\000\006\000\
140
-    \000\000\006\000\006\000\006\000\049\000\006\000\006\000\006\000\
141 135
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
142 136
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
143 137
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
144
-    \006\000\006\000\006\000\006\000\006\000\050\000\000\000\000\000\
145
-    \000\000\000\000\000\000\000\000\006\000\006\000\006\000\006\000\
138
+    \050\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\
146 139
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
147 140
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
148
-    \006\000\006\000\006\000\006\000\006\000\006\000\000\000\000\000\
149
-    \000\000\000\000\006\000\000\000\006\000\006\000\006\000\006\000\
150 141
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
142
+    \006\000\000\000\000\000\000\000\000\000\006\000\000\000\006\000\
151 143
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
152
-    \006\000\006\000\006\000\006\000\006\000\006\000\074\000\074\000\
153
-    \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\
154
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\074\000\
155
-    \074\000\074\000\074\000\074\000\074\000\073\000\073\000\073\000\
156
-    \073\000\073\000\073\000\073\000\073\000\000\000\081\000\000\000\
157
-    \000\000\077\000\255\255\000\000\074\000\074\000\074\000\074\000\
158
-    \074\000\074\000\074\000\074\000\074\000\074\000\000\000\074\000\
159
-    \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\
144
+    \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
145
+    \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
146
+    \006\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\
160 147
     \074\000\074\000\074\000\000\000\000\000\000\000\000\000\000\000\
148
+    \000\000\000\000\074\000\074\000\074\000\074\000\074\000\074\000\
149
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
150
+    \255\255\089\000\000\000\000\000\000\000\000\000\000\000\074\000\
151
+    \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\
152
+    \074\000\000\000\074\000\074\000\074\000\074\000\074\000\074\000\
153
+    \074\000\074\000\074\000\074\000\074\000\074\000\000\000\000\000\
161 154
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
162 155
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
163
-    \000\000\000\000\000\000\000\000\000\000\074\000\074\000\074\000\
164
-    \074\000\074\000\074\000\077\000\000\000\000\000\000\000\000\000\
165
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
166
-    \000\000\000\000\000\000\000\000\000\000\077\000\000\000\000\000\
167
-    \000\000\000\000\000\000\077\000\000\000\000\000\000\000\078\000\
168
-    \077\000\077\000\075\000\077\000\077\000\077\000\077\000\077\000\
169
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
170
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
171
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
172
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
173
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
174
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
175
-    \077\000\077\000\077\000\077\000\076\000\077\000\077\000\077\000\
176
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
177
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
178
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
179
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
156
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
157
+    \074\000\074\000\074\000\074\000\074\000\074\000\079\000\079\000\
158
+    \080\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
159
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
160
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
161
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
162
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
163
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
164
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
165
+    \079\000\079\000\078\000\079\000\079\000\079\000\079\000\079\000\
166
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
180 167
     \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
181
-    \079\000\079\000\000\000\000\000\000\000\000\000\000\000\000\000\
182
-    \000\000\079\000\079\000\079\000\079\000\079\000\079\000\077\000\
183
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
184
-    \077\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
185
-    \077\000\077\000\077\000\077\000\077\000\077\000\000\000\000\000\
186
-    \000\000\079\000\079\000\079\000\079\000\079\000\079\000\000\000\
168
+    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
169
+    \079\000\079\000\079\000\079\000\079\000\079\000\084\000\086\000\
170
+    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
171
+    \086\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
172
+    \086\000\086\000\086\000\086\000\086\000\086\000\000\000\000\000\
187 173
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
188 174
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
189
-    \077\000\077\000\077\000\077\000\077\000\077\000\000\000\000\000\
190 175
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
176
+    \086\000\086\000\086\000\086\000\086\000\086\000\000\000\000\000\
177
+    \085\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
191 178
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
179
+    \000\000\000\000\083\000\000\000\000\000\000\000\000\000\000\000\
180
+    \082\000\000\000\000\000\000\000\081\000\087\000\087\000\087\000\
181
+    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\000\000\
182
+    \000\000\000\000\000\000\000\000\000\000\000\000\087\000\087\000\
183
+    \087\000\087\000\087\000\087\000\000\000\000\000\000\000\000\000\
192 184
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
185
+    \000\000\000\000\000\000\000\000\000\000\000\000\077\000\000\000\
186
+    \000\000\000\000\000\000\000\000\000\000\000\000\087\000\087\000\
187
+    \087\000\087\000\087\000\087\000\000\000\000\000\000\000\000\000\
193 188
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
194 189
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
195 190
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -206,7 +201,9 @@ let __ocaml_lex_tables = {
206 201
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
207 202
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
208 203
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
209
-    ";
204
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
205
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
206
+    \000\000\000\000\000\000\000\000\000\000\000\000";
210 207
   Lexing.lex_check = 
211 208
    "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
212 209
     \255\255\000\000\000\000\255\255\255\255\027\000\255\255\255\255\
@@ -223,104 +220,91 @@ let __ocaml_lex_tables = {
223 220
     \036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
224 221
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
225 222
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
226
-    \000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\
227
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
228
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
229
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
230
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
231
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
232
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
233
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
234
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
235
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
236
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
237
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
238
-    \003\000\003\000\003\000\003\000\003\000\003\000\004\000\004\000\
223
+    \000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\
239 224
     \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
240 225
     \005\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\
241
-    \017\000\024\000\025\000\029\000\030\000\031\000\032\000\025\000\
242
-    \033\000\034\000\035\000\037\000\038\000\039\000\040\000\041\000\
243
-    \000\000\017\000\006\000\006\000\006\000\006\000\006\000\006\000\
244
-    \006\000\006\000\006\000\006\000\042\000\043\000\044\000\045\000\
245
-    \046\000\050\000\052\000\006\000\006\000\006\000\006\000\006\000\
226
+    \024\000\025\000\029\000\030\000\031\000\032\000\025\000\033\000\
227
+    \034\000\017\000\035\000\037\000\038\000\039\000\040\000\041\000\
246 228
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
229
+    \006\000\006\000\017\000\042\000\043\000\044\000\045\000\046\000\
230
+    \050\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
247 231
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
248
-    \006\000\006\000\006\000\006\000\006\000\051\000\053\000\051\000\
249
-    \005\000\006\000\054\000\006\000\006\000\006\000\006\000\006\000\
250 232
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
233
+    \006\000\006\000\006\000\051\000\052\000\051\000\053\000\006\000\
234
+    \005\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
251 235
     \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
252
-    \006\000\006\000\006\000\006\000\006\000\026\000\026\000\026\000\
253
-    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\055\000\
254
-    \057\000\058\000\083\000\255\255\085\000\255\255\026\000\026\000\
255
-    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
236
+    \006\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\
237
+    \006\000\006\000\006\000\054\000\055\000\057\000\058\000\091\000\
256 238
     \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
239
+    \026\000\026\000\093\000\255\255\255\255\255\255\255\255\255\255\
240
+    \000\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
257 241
     \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
258
-    \080\000\255\255\255\255\255\255\026\000\255\255\026\000\026\000\
259 242
     \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
243
+    \026\000\026\000\026\000\088\000\255\255\255\255\255\255\026\000\
244
+    \255\255\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
260 245
     \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
261 246
     \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
247
+    \026\000\026\000\026\000\048\000\048\000\048\000\048\000\048\000\
248
+    \048\000\048\000\048\000\048\000\048\000\255\255\255\255\255\255\
249
+    \255\255\255\255\255\255\255\255\048\000\048\000\048\000\048\000\
262 250
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
263
-    \048\000\048\000\255\255\255\255\255\255\255\255\255\255\255\255\
264
-    \255\255\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
265 251
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
252
+    \048\000\048\000\048\000\048\000\048\000\048\000\255\255\255\255\
253
+    \255\255\255\255\048\000\255\255\048\000\048\000\048\000\048\000\
266 254
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
267
-    \048\000\048\000\048\000\255\255\255\255\255\255\255\255\048\000\
268
-    \255\255\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
269 255
     \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
270
-    \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
271
-    \048\000\048\000\048\000\049\000\049\000\049\000\049\000\049\000\
272
-    \049\000\049\000\049\000\049\000\049\000\049\000\255\255\255\255\
273
-    \255\255\255\255\255\255\255\255\049\000\049\000\049\000\049\000\
256
+    \048\000\048\000\048\000\048\000\048\000\048\000\049\000\049\000\
274 257
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
258
+    \049\000\255\255\255\255\255\255\255\255\255\255\255\255\049\000\
275 259
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
276
-    \049\000\049\000\049\000\049\000\049\000\049\000\255\255\255\255\
277
-    \255\255\255\255\049\000\255\255\049\000\049\000\049\000\049\000\
278 260
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
279 261
     \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
280
-    \049\000\049\000\049\000\049\000\049\000\049\000\072\000\072\000\
281
-    \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
282
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\072\000\
283
-    \072\000\072\000\072\000\072\000\072\000\073\000\073\000\073\000\
284
-    \073\000\073\000\073\000\073\000\073\000\255\255\080\000\255\255\
285
-    \255\255\076\000\085\000\255\255\074\000\074\000\074\000\074\000\
286
-    \074\000\074\000\074\000\074\000\074\000\074\000\255\255\072\000\
287
-    \072\000\072\000\072\000\072\000\072\000\074\000\074\000\074\000\
288
-    \074\000\074\000\074\000\255\255\255\255\255\255\255\255\255\255\
289
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
290
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
291
-    \255\255\255\255\255\255\255\255\255\255\074\000\074\000\074\000\
292
-    \074\000\074\000\074\000\076\000\255\255\255\255\255\255\255\255\
293
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
294
-    \255\255\255\255\255\255\255\255\255\255\076\000\255\255\255\255\
295
-    \255\255\255\255\255\255\076\000\255\255\255\255\255\255\076\000\
296
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
297
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
298
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
299
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
300
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
301
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
302
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
303
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
304
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
305
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
306
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
307
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
308
-    \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\
309
-    \078\000\078\000\255\255\255\255\255\255\255\255\255\255\255\255\
310
-    \255\255\078\000\078\000\078\000\078\000\078\000\078\000\079\000\
311
-    \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\
312
-    \079\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
313
-    \079\000\079\000\079\000\079\000\079\000\079\000\255\255\255\255\
314
-    \255\255\078\000\078\000\078\000\078\000\078\000\078\000\255\255\
262
+    \049\000\255\255\255\255\255\255\255\255\049\000\255\255\049\000\
263
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
264
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
265
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
266
+    \049\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\
267
+    \072\000\072\000\072\000\255\255\255\255\255\255\255\255\255\255\
268
+    \255\255\255\255\072\000\072\000\072\000\072\000\072\000\072\000\
269
+    \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\
270
+    \093\000\088\000\255\255\255\255\255\255\255\255\255\255\074\000\
271
+    \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\
272
+    \074\000\255\255\072\000\072\000\072\000\072\000\072\000\072\000\
273
+    \074\000\074\000\074\000\074\000\074\000\074\000\255\255\255\255\
315 274
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
316 275
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
317
-    \079\000\079\000\079\000\079\000\079\000\079\000\255\255\255\255\
318 276
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
277
+    \074\000\074\000\074\000\074\000\074\000\074\000\075\000\075\000\
278
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
279
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
280
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
281
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
282
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
283
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
284
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
285
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
286
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
287
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
288
+    \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\
289
+    \075\000\075\000\075\000\075\000\075\000\075\000\078\000\081\000\
290
+    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
291
+    \081\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
292
+    \081\000\081\000\081\000\081\000\081\000\081\000\255\255\255\255\
319 293
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
320 294
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
321 295
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
296
+    \081\000\081\000\081\000\081\000\081\000\081\000\255\255\255\255\
297
+    \078\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
322 298
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
299
+    \255\255\255\255\078\000\255\255\255\255\255\255\255\255\255\255\
300
+    \078\000\255\255\255\255\255\255\078\000\086\000\086\000\086\000\
301
+    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\255\255\
302
+    \255\255\255\255\255\255\255\255\255\255\255\255\086\000\086\000\
303
+    \086\000\086\000\086\000\086\000\255\255\255\255\255\255\255\255\
323 304
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
305
+    \255\255\255\255\255\255\255\255\255\255\255\255\075\000\255\255\
306
+    \255\255\255\255\255\255\255\255\255\255\255\255\086\000\086\000\
307
+    \086\000\086\000\086\000\086\000\255\255\255\255\255\255\255\255\
324 308
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
325 309
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
326 310
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -334,7 +318,12 @@ let __ocaml_lex_tables = {
334 318
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
335 319
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
336 320
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
337
-    ";
321
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
322
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
323
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
324
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
325
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
326
+    \255\255\255\255\255\255\255\255\255\255\255\255";
338 327
   Lexing.lex_base_code = 
339 328
    "";
340 329
   Lexing.lex_backtrk_code = 
@@ -354,286 +343,347 @@ let rec token lexbuf =
354 343
 and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
355 344
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
356 345
       | 0 ->
357
-# 58 "lexer.mll"
346
+# 60 "lexer.mll"
358 347
                             ( INCLUDE )
359
-# 360 "lexer.ml"
348
+# 349 "lexer.ml"
360 349
 
361 350
   | 1 ->
362
-# 59 "lexer.mll"
351
+# 61 "lexer.mll"
363 352
            ( newline lexbuf ; token lexbuf )
364
-# 365 "lexer.ml"
353
+# 354 "lexer.ml"
365 354
 
366 355
   | 2 ->
367
-# 60 "lexer.mll"
356
+# 62 "lexer.mll"
368 357
               ( token lexbuf )
369
-# 370 "lexer.ml"
358
+# 359 "lexer.ml"
370 359
 
371 360
   | 3 ->
372
-# 61 "lexer.mll"
361
+# 63 "lexer.mll"
373 362
                   ( COUT )
374
-# 375 "lexer.ml"
363
+# 364 "lexer.ml"
375 364
 
376 365
   | 4 ->
377
-# 62 "lexer.mll"
366
+# 64 "lexer.mll"
378 367
                   ( ENDL )
379
-# 380 "lexer.ml"
368
+# 369 "lexer.ml"
380 369
 
381 370
   | 5 ->
382
-# 63 "lexer.mll"
371
+# 65 "lexer.mll"
383 372
            ( comment lexbuf )
384
-# 385 "lexer.ml"
373
+# 374 "lexer.ml"
385 374
 
386 375
   | 6 ->
387
-# 64 "lexer.mll"
376
+# 66 "lexer.mll"
388 377
            ( comment_inline lexbuf )
389
-# 390 "lexer.ml"
378
+# 379 "lexer.ml"
390 379
 
391 380
   | 7 ->
392
-# 65 "lexer.mll"
381
+# 67 "lexer.mll"
393 382
            ( OR )
394
-# 395 "lexer.ml"
383
+# 384 "lexer.ml"
395 384
 
396 385
   | 8 ->
397
-# 66 "lexer.mll"
386
+# 68 "lexer.mll"
398 387
            ( AND )
399
-# 400 "lexer.ml"
388
+# 389 "lexer.ml"
400 389
 
401 390
   | 9 ->
402
-# 67 "lexer.mll"
391
+# 69 "lexer.mll"
403 392
            ( EQ )
404
-# 405 "lexer.ml"
393
+# 394 "lexer.ml"
405 394
 
406 395
   | 10 ->
407
-# 68 "lexer.mll"
396
+# 70 "lexer.mll"
408 397
            ( NEQ )
409
-# 410 "lexer.ml"
398
+# 399 "lexer.ml"
410 399
 
411 400
   | 11 ->
412
-# 69 "lexer.mll"
401
+# 71 "lexer.mll"
413 402
           ( LT )
414
-# 415 "lexer.ml"
403
+# 404 "lexer.ml"
415 404
 
416 405
   | 12 ->
417
-# 70 "lexer.mll"
406
+# 72 "lexer.mll"
418 407
            ( LEQ )
419
-# 420 "lexer.ml"
408
+# 409 "lexer.ml"
420 409
 
421 410
   | 13 ->
422
-# 71 "lexer.mll"
411
+# 73 "lexer.mll"
423 412
           ( GT )
424
-# 425 "lexer.ml"
413
+# 414 "lexer.ml"
425 414
 
426 415
   | 14 ->
427
-# 72 "lexer.mll"
416
+# 74 "lexer.mll"
428 417
            ( GEQ )
429
-# 430 "lexer.ml"
418
+# 419 "lexer.ml"
430 419
 
431 420
   | 15 ->
432
-# 73 "lexer.mll"
421
+# 75 "lexer.mll"
433 422
            ( INCR )
434
-# 435 "lexer.ml"
423
+# 424 "lexer.ml"
435 424
 
436 425
   | 16 ->
437
-# 74 "lexer.mll"
426
+# 76 "lexer.mll"
438 427
            ( DECR )
439
-# 440 "lexer.ml"
428
+# 429 "lexer.ml"
440 429
 
441 430
   | 17 ->
442
-# 75 "lexer.mll"
431
+# 77 "lexer.mll"
443 432
           ( ASSIGN )
444
-# 445 "lexer.ml"
433
+# 434 "lexer.ml"
445 434
 
446 435
   | 18 ->
447
-# 76 "lexer.mll"
436
+# 78 "lexer.mll"
448 437
           ( PLUS )
449
-# 450 "lexer.ml"
438
+# 439 "lexer.ml"
450 439
 
451 440
   | 19 ->
452
-# 77 "lexer.mll"
441
+# 79 "lexer.mll"
453 442
           ( MINUS )
454
-# 455 "lexer.ml"
443
+# 444 "lexer.ml"
455 444
 
456 445
   | 20 ->
457
-# 78 "lexer.mll"
446
+# 80 "lexer.mll"
458 447
           ( TIMES )
459
-# 460 "lexer.ml"
448
+# 449 "lexer.ml"
460 449
 
461 450
   | 21 ->
462
-# 79 "lexer.mll"
451
+# 81 "lexer.mll"
463 452
           ( DIV )
464
-# 465 "lexer.ml"
453
+# 454 "lexer.ml"
465 454
 
466 455
   | 22 ->
467
-# 80 "lexer.mll"
456
+# 82 "lexer.mll"
468 457
           ( MOD )
469
-# 470 "lexer.ml"
458
+# 459 "lexer.ml"
470 459
 
471 460
   | 23 ->
472
-# 81 "lexer.mll"
461
+# 83 "lexer.mll"
473 462
           ( NOT )
474
-# 475 "lexer.ml"
463
+# 464 "lexer.ml"
475 464
 
476 465
   | 24 ->
477
-# 82 "lexer.mll"
466
+# 84 "lexer.mll"
478 467
           ( ECOMM )
479
-# 480 "lexer.ml"
468
+# 469 "lexer.ml"
480 469
 
481 470
   | 25 ->
482
-# 83 "lexer.mll"
471
+# 85 "lexer.mll"
483 472
           ( LPAREN )
484
-# 485 "lexer.ml"
473
+# 474 "lexer.ml"
485 474
 
486 475
   | 26 ->
487
-# 84 "lexer.mll"
476
+# 86 "lexer.mll"
488 477
           ( RPAREN )
489
-# 490 "lexer.ml"
478
+# 479 "lexer.ml"
490 479
 
491 480
   | 27 ->
492
-# 85 "lexer.mll"
481
+# 87 "lexer.mll"
493 482
            ( ARROW )
494
-# 495 "lexer.ml"
483
+# 484 "lexer.ml"
495 484
 
496 485
   | 28 ->
497
-# 86 "lexer.mll"
486
+# 88 "lexer.mll"
498 487
           ( DOT )
499
-# 500 "lexer.ml"
488
+# 489 "lexer.ml"
500 489
 
501 490
   | 29 ->
502
-# 87 "lexer.mll"
491
+# 89 "lexer.mll"
503 492
           ( SEMICOLON )
504
-# 505 "lexer.ml"
493
+# 494 "lexer.ml"
505 494
 
506 495
   | 30 ->
507
-# 88 "lexer.mll"
496
+# 90 "lexer.mll"
508 497
           ( COLON )
509
-# 510 "lexer.ml"
498
+# 499 "lexer.ml"
510 499
 
511 500
   | 31 ->
512
-# 89 "lexer.mll"
501
+# 91 "lexer.mll"
513 502
           ( COMMA )
514
-# 515 "lexer.ml"
503
+# 504 "lexer.ml"
515 504
 
516 505
   | 32 ->
517
-# 90 "lexer.mll"
506
+# 92 "lexer.mll"
518 507
            ( IN )
519
-# 520 "lexer.ml"
508
+# 509 "lexer.ml"
520 509
 
521 510
   | 33 ->
522
-# 91 "lexer.mll"
511
+# 93 "lexer.mll"
523 512
           ( LBRACE )
524
-# 525 "lexer.ml"
513
+# 514 "lexer.ml"
525 514
 
526 515
   | 34 ->
527
-# 92 "lexer.mll"
516
+# 94 "lexer.mll"
528 517
           ( RBRACE )
529
-# 530 "lexer.ml"
518
+# 519 "lexer.ml"
530 519
 
531 520
   | 35 ->
532 521
 let
533
-# 93 "lexer.mll"
522
+# 95 "lexer.mll"
534 523
                s
535
-# 536 "lexer.ml"
524
+# 525 "lexer.ml"
536 525
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
537
-# 94 "lexer.mll"
526
+# 96 "lexer.mll"
538 527
         ( id_or_kwd s )
539
-# 540 "lexer.ml"
528
+# 529 "lexer.ml"
540 529
 
541 530
   | 36 ->
542
-# 95 "lexer.mll"
531
+# 97 "lexer.mll"
543 532
           ( INT 0 )
544
-# 545 "lexer.ml"
533
+# 534 "lexer.ml"
545 534
 
546 535
   | 37 ->
547 536
 let
548
-# 96 "lexer.mll"
537
+# 98 "lexer.mll"
549 538
                               i
550
-# 551 "lexer.ml"
539
+# 540 "lexer.ml"
551 540
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
552
-# 96 "lexer.mll"
541
+# 98 "lexer.mll"
553 542
                                 ( INT (int_of_string i) )
554
-# 555 "lexer.ml"
543
+# 544 "lexer.ml"
555 544
 
556 545
   | 38 ->
557 546
 let
558
-# 97 "lexer.mll"
547
+# 99 "lexer.mll"
559 548
                              i
560
-# 561 "lexer.ml"
549
+# 550 "lexer.ml"
561 550
 = Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) lexbuf.Lexing.lex_curr_pos in
562
-# 97 "lexer.mll"
551
+# 99 "lexer.mll"
563 552
                                 ( INT (int_of_string ("0o"^i)) )
564
-# 565 "lexer.ml"
553
+# 554 "lexer.ml"
565 554
 
566 555
   | 39 ->
567 556
 let
568
-# 98 "lexer.mll"
557
+# 100 "lexer.mll"
569 558
                                 i
570
-# 571 "lexer.ml"
559
+# 560 "lexer.ml"
571 560
 = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
572
-# 98 "lexer.mll"
561
+# 100 "lexer.mll"
573 562
                                    ( INT (int_of_string i) )
574
-# 575 "lexer.ml"
563
+# 564 "lexer.ml"
575 564
 
576 565
   | 40 ->
577
-let
578
-# 99 "lexer.mll"
579
-                s
580
-# 581 "lexer.ml"
581
-= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
582
-# 99 "lexer.mll"
583
-                  ( STRING s )
584
-# 585 "lexer.ml"
566
+# 101 "lexer.mll"
567
+          ( chaine lexbuf )
568
+# 569 "lexer.ml"
585 569
 
586 570
   | 41 ->
587
-# 100 "lexer.mll"
571
+# 102 "lexer.mll"
588 572
           ( EOF )
589
-# 590 "lexer.ml"
573
+# 574 "lexer.ml"
590 574
 
591 575
   | 42 ->
592 576
 let
593
-# 101 "lexer.mll"
577
+# 103 "lexer.mll"
594 578
            c
595
-# 596 "lexer.ml"
579
+# 580 "lexer.ml"
596 580
 = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
597
-# 101 "lexer.mll"
581
+# 103 "lexer.mll"
598 582
              ( raise (Lexing_error ("Caractère illégal : " ^ String.make 1 c)) )
599
-# 600 "lexer.ml"
583
+# 584 "lexer.ml"
600 584
 
601 585
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state
602 586
 
587
+and chaine lexbuf =
588
+    __ocaml_lex_chaine_rec lexbuf 75
589
+and __ocaml_lex_chaine_rec lexbuf __ocaml_lex_state =
590
+  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
591
+      | 0 ->
592
+# 106 "lexer.mll"
593
+          ( let tmp = !localstring in localstring := ""; STRING tmp )
594
+# 595 "lexer.ml"
595
+
596
+  | 1 ->
597
+let
598
+# 107 "lexer.mll"
599
+                                                     c
600
+# 601 "lexer.ml"
601
+= Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
602
+# 107 "lexer.mll"
603
+                                                       ( localstring := !localstring ^ (String.make 1 c) ; chaine lexbuf )
604
+# 605 "lexer.ml"
605
+
606
+  | 2 ->
607
+# 108 "lexer.mll"
608
+                ( localstring := !localstring ^ "\\" ; chaine lexbuf )
609
+# 610 "lexer.ml"
610
+
611
+  | 3 ->
612
+# 109 "lexer.mll"
613
+                ( localstring := !localstring ^ "\"" ; chaine lexbuf )
614
+# 615 "lexer.ml"
615
+
616
+  | 4 ->
617
+# 110 "lexer.mll"
618
+               ( localstring := !localstring ^ "\n" ; chaine lexbuf )
619
+# 620 "lexer.ml"
620
+
621
+  | 5 ->
622
+# 111 "lexer.mll"
623
+               ( localstring := !localstring ^ "\t" ; chaine lexbuf )
624
+# 625 "lexer.ml"
625
+
626
+  | 6 ->
627
+let
628
+# 112 "lexer.mll"
629
+                                             hex
630
+# 631 "lexer.ml"
631
+= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 2) (lexbuf.Lexing.lex_start_pos + 4) in
632
+# 112 "lexer.mll"
633
+                                                  ( localstring := !localstring ^ (String.make 1 (char_of_int (int_of_string ("0x"^hex)))); chaine lexbuf )
634
+# 635 "lexer.ml"
635
+
636
+  | 7 ->
637
+# 113 "lexer.mll"
638
+          ( raise (Lexing_error "Unterminated string") )
639
+# 640 "lexer.ml"
640
+
641
+  | 8 ->
642
+let
643
+# 114 "lexer.mll"
644
+           c
645
+# 646 "lexer.ml"
646
+= Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in
647
+# 114 "lexer.mll"
648
+             ( raise (Lexing_error (Printf.sprintf "Character %s forbidden :" (if c = '\n' then "newline" else String.make 1 c))) )
649
+# 650 "lexer.ml"
650
+
651
+  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_chaine_rec lexbuf __ocaml_lex_state
652
+
603 653
 and comment lexbuf =
604
-    __ocaml_lex_comment_rec lexbuf 80
654
+    __ocaml_lex_comment_rec lexbuf 88
605 655
 and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state =
606 656
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
607 657
       | 0 ->
608
-# 104 "lexer.mll"
658
+# 118 "lexer.mll"
609 659
            ( token lexbuf )
610
-# 611 "lexer.ml"
660
+# 661 "lexer.ml"
611 661
 
612 662
   | 1 ->
613
-# 105 "lexer.mll"
663
+# 119 "lexer.mll"
614 664
         ( comment lexbuf )
615
-# 616 "lexer.ml"
665
+# 666 "lexer.ml"
616 666
 
617 667
   | 2 ->
618
-# 106 "lexer.mll"
668
+# 120 "lexer.mll"
619 669
           ( raise (Lexing_error "Commentaire non terminé.") )
620
-# 621 "lexer.ml"
670
+# 671 "lexer.ml"
621 671
 
622 672
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state
623 673
 
624 674
 and comment_inline lexbuf =
625
-    __ocaml_lex_comment_inline_rec lexbuf 85
675
+    __ocaml_lex_comment_inline_rec lexbuf 93
626 676
 and __ocaml_lex_comment_inline_rec lexbuf __ocaml_lex_state =
627 677
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
628 678
       | 0 ->
629
-# 109 "lexer.mll"
679
+# 123 "lexer.mll"
630 680
            ( token lexbuf )
631
-# 632 "lexer.ml"
681
+# 682 "lexer.ml"
632 682
 
633 683
   | 1 ->
634
-# 110 "lexer.mll"
684
+# 124 "lexer.mll"
635 685
         ( comment_inline lexbuf )
636
-# 637 "lexer.ml"
686
+# 687 "lexer.ml"
637 687
 
638 688
   | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_inline_rec lexbuf __ocaml_lex_state
639 689
 

+ 15
- 1
lexer.mll View File

@@ -38,6 +38,8 @@
38 38
         let pos = lexbuf.lex_curr_p in
39 39
         lexbuf.lex_curr_p <- 
40 40
             { pos with pos_lnum = pos.pos_lnum + 1; pos_bol = pos.pos_cnum }
41
+
42
+    let localstring = ref ""
41 43
 }
42 44
 
43 45
 let chiffre = ['0'-'9']
@@ -96,10 +98,22 @@ rule token = parse
96 98
     | (['1'-'9'] chiffre*) as i { INT (int_of_string i) }
97 99
     | '0' (chiffre_octal+ as i) { INT (int_of_string ("0o"^i)) }
98 100
     | ('0' 'x' chiffre_hexa+ as i) { INT (int_of_string i) }
99
-    | chaine as s { STRING s }
101
+    | '"' { chaine lexbuf }
100 102
     | eof { EOF }
101 103
     | _ as c { raise (Lexing_error ("Caractère illégal : " ^ String.make 1 c)) }
102 104
 
105
+and chaine = parse
106
+    | '"' { let tmp = !localstring in localstring := ""; STRING tmp }
107
+    | ['\032'-'\033' '\035'-'\091' '\093'-'\127'] as c { localstring := !localstring ^ (String.make 1 c) ; chaine lexbuf }
108
+    | '\\' '\\' { localstring := !localstring ^ "\\" ; chaine lexbuf }
109
+    | '\\' '\"' { localstring := !localstring ^ "\"" ; chaine lexbuf }
110
+    | '\\' 'n' { localstring := !localstring ^ "\n" ; chaine lexbuf }
111
+    | '\\' 't' { localstring := !localstring ^ "\t" ; chaine lexbuf }
112
+    | '\\' 'x' (chiffre_hexa chiffre_hexa as hex) { localstring := !localstring ^ (String.make 1 (char_of_int (int_of_string ("0x"^hex)))); chaine lexbuf }
113
+    | eof { raise (Lexing_error "Unterminated string") }
114
+    | _ as c { raise (Lexing_error (Printf.sprintf "Character %s forbidden :" (if c = '\n' then "newline" else String.make 1 c))) }
115
+
116
+
103 117
 and comment = parse
104 118
     | "*/" { token lexbuf }
105 119
     | _ { comment lexbuf }

BIN
main.cmi View File


BIN
main.cmo View File


BIN
minic++ View File


+ 1
- 1
tests/exec/string.s View File

@@ -30,4 +30,4 @@ string_4:
30 30
 string_5:
31 31
 	.asciiz "a\"c\n"
32 32
 string_6:
33
-	.asciiz "\x41\x42\x43\n"
33
+	.asciiz "ABC\n"