diff options
| author | Josh Wolfe <thejoshwolfe@gmail.com> | 2017-12-12 22:41:21 -0700 |
|---|---|---|
| committer | Josh Wolfe <thejoshwolfe@gmail.com> | 2017-12-17 11:16:55 -0700 |
| commit | ab44939941215a753ca51f7b2d84a90d52bfebcf (patch) | |
| tree | 0764925c68e694a4ecbdbb9346bb3a5a9acf81d9 /src-self-hosted/tokenizer.zig | |
| parent | 39e96d933ec3611017edccfdd443fece826a7207 (diff) | |
| download | zig-ab44939941215a753ca51f7b2d84a90d52bfebcf.tar.gz zig-ab44939941215a753ca51f7b2d84a90d52bfebcf.zip | |
roughly parsing infix operators
Diffstat (limited to 'src-self-hosted/tokenizer.zig')
| -rw-r--r-- | src-self-hosted/tokenizer.zig | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src-self-hosted/tokenizer.zig b/src-self-hosted/tokenizer.zig index 5d32a83af7..570d41fa7e 100644 --- a/src-self-hosted/tokenizer.zig +++ b/src-self-hosted/tokenizer.zig @@ -71,7 +71,10 @@ pub const Token = struct { StringLiteral: StrLitKind, Eof, Builtin, + Bang, Equal, + EqualEqual, + BangEqual, LParen, RParen, Semicolon, @@ -187,6 +190,8 @@ pub const Tokenizer = struct { C, StringLiteral, StringLiteralBackslash, + Equal, + Bang, Minus, Slash, LineComment, @@ -232,9 +237,10 @@ pub const Tokenizer = struct { result.id = Token.Id.Builtin; }, '=' => { - result.id = Token.Id.Equal; - self.index += 1; - break; + state = State.Equal; + }, + '!' => { + state = State.Bang; }, '(' => { result.id = Token.Id.LParen; @@ -356,6 +362,30 @@ pub const Tokenizer = struct { }, }, + State.Bang => switch (c) { + '=' => { + result.id = Token.Id.BangEqual; + self.index += 1; + break; + }, + else => { + result.id = Token.Id.Bang; + break; + }, + }, + + State.Equal => switch (c) { + '=' => { + result.id = Token.Id.EqualEqual; + self.index += 1; + break; + }, + else => { + result.id = Token.Id.Equal; + break; + }, + }, + State.Minus => switch (c) { '>' => { result.id = Token.Id.Arrow; |
