aboutsummaryrefslogtreecommitdiff
path: root/src-self-hosted/tokenizer.zig
diff options
context:
space:
mode:
authorJosh Wolfe <thejoshwolfe@gmail.com>2017-12-12 22:41:21 -0700
committerJosh Wolfe <thejoshwolfe@gmail.com>2017-12-17 11:16:55 -0700
commitab44939941215a753ca51f7b2d84a90d52bfebcf (patch)
tree0764925c68e694a4ecbdbb9346bb3a5a9acf81d9 /src-self-hosted/tokenizer.zig
parent39e96d933ec3611017edccfdd443fece826a7207 (diff)
downloadzig-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.zig36
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;