summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lexer.cc40
-rw-r--r--src/lexer.in.cc4
-rw-r--r--src/lexer_test.cc4
3 files changed, 29 insertions, 19 deletions
diff --git a/src/lexer.cc b/src/lexer.cc
index 40d7def..d3ef43f 100644
--- a/src/lexer.cc
+++ b/src/lexer.cc
@@ -109,7 +109,7 @@ Lexer::Token Lexer::ReadToken() {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
192, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 160, 128,
+ 128, 128, 128, 128, 128, 160, 160, 128,
160, 160, 160, 160, 160, 160, 160, 160,
160, 160, 128, 128, 128, 128, 128, 128,
128, 160, 160, 160, 160, 160, 160, 160,
@@ -140,7 +140,7 @@ Lexer::Token Lexer::ReadToken() {
yych = *p;
if (yych <= 'Z') {
- if (yych <= '-') {
+ if (yych <= ',') {
if (yych <= 0x1F) {
if (yych <= 0x00) goto yy21;
if (yych == '\n') goto yy4;
@@ -455,7 +455,7 @@ bool Lexer::ReadIdent(string* out) {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 128, 0,
+ 0, 0, 0, 0, 0, 128, 128, 0,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 0, 0, 0, 0, 0, 0,
0, 128, 128, 128, 128, 128, 128, 128,
@@ -486,7 +486,7 @@ bool Lexer::ReadIdent(string* out) {
yych = *p;
if (yych <= '@') {
if (yych <= '.') {
- if (yych <= '-') goto yy83;
+ if (yych <= ',') goto yy83;
} else {
if (yych <= '/') goto yy83;
if (yych >= ':') goto yy83;
@@ -543,7 +543,7 @@ bool Lexer::ReadEvalString(EvalString* eval, bool path, string* err) {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
16, 128, 128, 128, 0, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 160, 128,
+ 128, 128, 128, 128, 128, 224, 160, 128,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 0, 128, 128, 128, 128, 128,
128, 224, 224, 224, 224, 224, 224, 224,
@@ -610,27 +610,35 @@ yy91:
}
yy93:
++p;
- if ((yych = *p) <= '9') {
+ if ((yych = *p) <= '/') {
if (yych <= ' ') {
if (yych == '\n') goto yy106;
if (yych <= 0x1F) goto yy97;
goto yy99;
} else {
- if (yych == '$') goto yy101;
- if (yych <= '/') goto yy97;
- goto yy103;
+ if (yych <= '$') {
+ if (yych <= '#') goto yy97;
+ goto yy101;
+ } else {
+ if (yych == '-') goto yy103;
+ goto yy97;
+ }
}
} else {
- if (yych <= '_') {
+ if (yych <= '^') {
+ if (yych <= '9') goto yy103;
if (yych <= '@') goto yy97;
if (yych <= 'Z') goto yy103;
- if (yych <= '^') goto yy97;
- goto yy103;
- } else {
- if (yych <= '`') goto yy97;
- if (yych <= 'z') goto yy103;
- if (yych <= '{') goto yy105;
goto yy97;
+ } else {
+ if (yych <= '`') {
+ if (yych <= '_') goto yy103;
+ goto yy97;
+ } else {
+ if (yych <= 'z') goto yy103;
+ if (yych <= '{') goto yy105;
+ goto yy97;
+ }
}
}
{
diff --git a/src/lexer.in.cc b/src/lexer.in.cc
index c5d73e1..4d6d132 100644
--- a/src/lexer.in.cc
+++ b/src/lexer.in.cc
@@ -106,8 +106,8 @@ Lexer::Token Lexer::ReadToken() {
re2c:yyfill:enable = 0;
nul = "\000";
- simple_varname = [a-zA-Z0-9_]+;
- varname = [a-zA-Z0-9_.]+;
+ simple_varname = [a-zA-Z0-9_-]+;
+ varname = [a-zA-Z0-9_.-]+;
"#"[^\000\n]*"\n" { continue; }
[\n] { token = NEWLINE; break; }
diff --git a/src/lexer_test.cc b/src/lexer_test.cc
index ce8082a..44d1d04 100644
--- a/src/lexer_test.cc
+++ b/src/lexer_test.cc
@@ -39,7 +39,7 @@ TEST(Lexer, ReadEvalStringEscapes) {
}
TEST(Lexer, ReadIdent) {
- Lexer lexer("foo baR baz_123 blah.dots");
+ Lexer lexer("foo baR baz_123 foo-bar");
string ident;
EXPECT_TRUE(lexer.ReadIdent(&ident));
EXPECT_EQ("foo", ident);
@@ -47,6 +47,8 @@ TEST(Lexer, ReadIdent) {
EXPECT_EQ("baR", ident);
EXPECT_TRUE(lexer.ReadIdent(&ident));
EXPECT_EQ("baz_123", ident);
+ EXPECT_TRUE(lexer.ReadIdent(&ident));
+ EXPECT_EQ("foo-bar", ident);
}
TEST(Lexer, ReadIdentCurlies) {