commit 3976981ab3370d099535d79d42bd82d5924df7f5 (tree)
parent 7297baa9c6f3f1b894b47fe7b06b5ae2007d0f3c
Author: Andrew Kelley <superjoe30@gmail.com>
Date: Mon, 4 Dec 2017 23:40:33 -0500
tokenizing hello world
Diffstat:
1 file changed, 46 insertions(+), 1 deletion(-)
diff --git a/src-self-hosted/main.zig b/src-self-hosted/main.zig
@@ -77,6 +77,12 @@ const Token = struct {
LParen,
RParen,
Semicolon,
+ Percent,
+ LBrace,
+ RBrace,
+ Period,
+ Minus,
+ Arrow,
};
};
@@ -102,6 +108,7 @@ const Tokenizer = struct {
C,
StringLiteral,
StringLiteralBackslash,
+ Minus,
};
pub fn next(self: &Tokenizer) -> Token {
@@ -154,6 +161,29 @@ const Tokenizer = struct {
self.index += 1;
break;
},
+ '%' => {
+ result.id = Token.Id { .Percent = {} };
+ self.index += 1;
+ break;
+ },
+ '{' => {
+ result.id = Token.Id { .LBrace = {} };
+ self.index += 1;
+ break;
+ },
+ '}' => {
+ result.id = Token.Id { .RBrace = {} };
+ self.index += 1;
+ break;
+ },
+ '.' => {
+ result.id = Token.Id { .Period = {} };
+ self.index += 1;
+ break;
+ },
+ '-' => {
+ state = State.Minus;
+ },
else => {
result.id = Token.Id { .Invalid = {} };
self.index += 1;
@@ -195,9 +225,24 @@ const Tokenizer = struct {
'\n' => break, // Look for this error later.
else => {},
},
+
State.StringLiteralBackslash => switch (c) {
'\n' => break, // Look for this error later.
- else => {},
+ else => {
+ state = State.StringLiteral;
+ },
+ },
+
+ State.Minus => switch (c) {
+ '>' => {
+ result.id = Token.Id { .Arrow = {} };
+ self.index += 1;
+ break;
+ },
+ else => {
+ result.id = Token.Id { .Minus = {} };
+ break;
+ },
},
}
}