| ... | @@ -77,6 +77,12 @@ const Token = struct { | ... | @@ -77,6 +77,12 @@ const Token = struct { |
| 77 | LParen, | 77 | LParen, |
| 78 | RParen, | 78 | RParen, |
| 79 | Semicolon, | 79 | Semicolon, |
| | 80 | Percent, |
| | 81 | LBrace, |
| | 82 | RBrace, |
| | 83 | Period, |
| | 84 | Minus, |
| | 85 | Arrow, |
| 80 | }; | 86 | }; |
| 81 | }; | 87 | }; |
| 82 | | 88 | |
| ... | @@ -102,6 +108,7 @@ const Tokenizer = struct { | ... | @@ -102,6 +108,7 @@ const Tokenizer = struct { |
| 102 | C, | 108 | C, |
| 103 | StringLiteral, | 109 | StringLiteral, |
| 104 | StringLiteralBackslash, | 110 | StringLiteralBackslash, |
| | 111 | Minus, |
| 105 | }; | 112 | }; |
| 106 | | 113 | |
| 107 | pub fn next(self: &Tokenizer) -> Token { | 114 | pub fn next(self: &Tokenizer) -> Token { |
| ... | @@ -154,6 +161,29 @@ const Tokenizer = struct { | ... | @@ -154,6 +161,29 @@ const Tokenizer = struct { |
| 154 | self.index += 1; | 161 | self.index += 1; |
| 155 | break; | 162 | break; |
| 156 | }, | 163 | }, |
| | 164 | '%' => { |
| | 165 | result.id = Token.Id { .Percent = {} }; |
| | 166 | self.index += 1; |
| | 167 | break; |
| | 168 | }, |
| | 169 | '{' => { |
| | 170 | result.id = Token.Id { .LBrace = {} }; |
| | 171 | self.index += 1; |
| | 172 | break; |
| | 173 | }, |
| | 174 | '}' => { |
| | 175 | result.id = Token.Id { .RBrace = {} }; |
| | 176 | self.index += 1; |
| | 177 | break; |
| | 178 | }, |
| | 179 | '.' => { |
| | 180 | result.id = Token.Id { .Period = {} }; |
| | 181 | self.index += 1; |
| | 182 | break; |
| | 183 | }, |
| | 184 | '-' => { |
| | 185 | state = State.Minus; |
| | 186 | }, |
| 157 | else => { | 187 | else => { |
| 158 | result.id = Token.Id { .Invalid = {} }; | 188 | result.id = Token.Id { .Invalid = {} }; |
| 159 | self.index += 1; | 189 | self.index += 1; |
| ... | @@ -195,9 +225,24 @@ const Tokenizer = struct { | ... | @@ -195,9 +225,24 @@ const Tokenizer = struct { |
| 195 | '\n' => break, // Look for this error later. | 225 | '\n' => break, // Look for this error later. |
| 196 | else => {}, | 226 | else => {}, |
| 197 | }, | 227 | }, |
| | 228 | |
| 198 | State.StringLiteralBackslash => switch (c) { | 229 | State.StringLiteralBackslash => switch (c) { |
| 199 | '\n' => break, // Look for this error later. | 230 | '\n' => break, // Look for this error later. |
| 200 | else => {}, | 231 | else => { |
| | 232 | state = State.StringLiteral; |
| | 233 | }, |
| | 234 | }, |
| | 235 | |
| | 236 | State.Minus => switch (c) { |
| | 237 | '>' => { |
| | 238 | result.id = Token.Id { .Arrow = {} }; |
| | 239 | self.index += 1; |
| | 240 | break; |
| | 241 | }, |
| | 242 | else => { |
| | 243 | result.id = Token.Id { .Minus = {} }; |
| | 244 | break; |
| | 245 | }, |
| 201 | }, | 246 | }, |
| 202 | } | 247 | } |
| 203 | } | 248 | } |