changeset 9:5d6968cc751e

- Parsing string and character literals now (rudimentary implementation.)
author aziz
date Sat, 23 Jun 2007 07:46:00 +0000
parents d4ba94a5a282
children 3ee65d6e39c9
files trunk/src/Lexer.d trunk/src/Token.d trunk/src/format.css trunk/src/main.d
diffstat 4 files changed, 40 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Fri Jun 22 20:41:04 2007 +0000
+++ b/trunk/src/Lexer.d	Sat Jun 23 07:46:00 2007 +0000
@@ -151,6 +151,35 @@
         }
       }
 
+      if (c == '"')
+      {
+        do {
+          c = *++p;
+          if (c == 0)
+            throw new Error("unterminated string literal.");
+          if (c == '\\')
+            ++p;
+        } while (c != '"')
+        ++p;
+        t.type = TOK.String;
+        t.end = p;
+        return;
+      }
+
+      if (c == '\'')
+      {
+        do {
+          c = *++p;
+          if (c == 0)
+            throw new Error("unterminated character literal.");
+          if (c == '\\')
+            ++p;
+        } while (c != '\'')
+        ++p;
+        t.type = TOK.Character;
+        t.end = p;
+        return;
+      }
       c = *++p;
     }
   }
--- a/trunk/src/Token.d	Fri Jun 22 20:41:04 2007 +0000
+++ b/trunk/src/Token.d	Sat Jun 23 07:46:00 2007 +0000
@@ -15,6 +15,8 @@
   Identifier,
   Whitespace,
   Comment,
+  String,
+  Character,
   EOF
 }
 
--- a/trunk/src/format.css	Fri Jun 22 20:41:04 2007 +0000
+++ b/trunk/src/format.css	Sat Jun 23 07:46:00 2007 +0000
@@ -5,4 +5,6 @@
   font-size: 0.8em;
 }
 c { color: green; }
-i { color: darkblue;}
\ No newline at end of file
+i { color: darkblue; }
+sl { color: red; }
+cl { color: purple; }
\ No newline at end of file
--- a/trunk/src/main.d	Fri Jun 22 20:41:04 2007 +0000
+++ b/trunk/src/main.d	Sat Jun 23 07:46:00 2007 +0000
@@ -49,6 +49,12 @@
       case TOK.Comment:
         writef("<c>%s</c>", span);
       break;
+      case TOK.String:
+        writef("<sl>%s</sl>", span);
+      break;
+      case TOK.Character:
+        writef("<cl>%s</cl>", span);
+      break;
       default:
     }
     end = token.end;