Commit 3976981ab3

Andrew Kelley <superjoe30@gmail.com>
2017-12-05 05:40:33
tokenizing hello world
1 parent 7297baa
Changed files (1)
src-self-hosted
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;
+                    },
                 },
             }
         }