summaryrefslogtreecommitdiffstats
path: root/src/lex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lex.cpp')
-rw-r--r--src/lex.cpp61
1 files changed, 56 insertions, 5 deletions
diff --git a/src/lex.cpp b/src/lex.cpp
index 5064dd7..3058232 100644
--- a/src/lex.cpp
+++ b/src/lex.cpp
@@ -337,13 +337,67 @@ int lex_t::lex(parse_token_value_t *value) {
if (!next(true))
return syntax_error(value);
- value->c = current();
+ if (current() == '\\') {
+ if (!next(true))
+ return syntax_error(value);
+
+ switch (current()) {
+ case 'a':
+ value->c = '\a';
+ break;
+
+ case 'b':
+ value->c = '\b';
+ break;
+
+ case 'f':
+ value->c = '\f';
+ break;
+
+ case 'n':
+ value->c = '\n';
+ break;
+
+ case 'r':
+ value->c = '\r';
+ break;
+
+ case 't':
+ value->c = '\t';
+ break;
+
+ case 'v':
+ value->c = '\v';
+ break;
+
+ case '\\':
+ value->c = '\\';
+ break;
+
+ case '\'':
+ value->c = '\'';
+ break;
+
+ case '"':
+ value->c = '"';
+ break;
+
+ case '?':
+ value->c = '?';
+ break;
+
+ default:
+ return syntax_error(value);
+ }
+ }
+ else {
+ value->c = current();
+ }
if (!next(true) || current() != '\'')
return syntax_error(value);
next(true);
-
consume(false);
return TOK_CHAR;
@@ -354,9 +408,6 @@ int lex_t::lex(parse_token_value_t *value) {
case '"':
return lex_string(value);
- //case '0' ... '9':
- //return lex_number(value);
-
case 'a' ... 'z':
case 'A' ... 'Z':
return lex_symbol(value);