aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2018-03-16 12:14:58 +0100
committerGitHub <noreply@github.com>2018-03-16 12:14:58 +0100
commit64441f055194e9fd9e924a58e67cadb030ba918f (patch)
treebdb9efbf4241073fd5c28d6ef13d683683d20f56 /src/libexpr
parenteb75bc5afbaf2891a2db71e7932105223da94ac9 (diff)
parenta0e38c16bc7773d0fc62771a9935e079c00899ef (diff)
Merge pull request #1939 from dezgeg/lexer-fix
libexpr: Recognize newline in more places in lexer
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/lexer.l9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l
index e5e01fb58..1e9c29afa 100644
--- a/src/libexpr/lexer.l
+++ b/src/libexpr/lexer.l
@@ -85,6 +85,7 @@ static Expr * unescapeStr(SymbolTable & symbols, const char * s, size_t length)
%}
+ANY .|\n
ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]*
INT [0-9]+
FLOAT (([1-9][0-9]*\.[0-9]*)|(0?\.[0-9]+))([Ee][+-]?[0-9]+)?
@@ -146,8 +147,8 @@ or { return OR_KW; }
<INITIAL,INSIDE_DOLLAR_CURLY>\" {
PUSH_STATE(STRING); return '"';
}
-<STRING>([^\$\"\\]|\$[^\{\"\\]|\\.|\$\\.)*\$/\" |
-<STRING>([^\$\"\\]|\$[^\{\"\\]|\\.|\$\\.)+ {
+<STRING>([^\$\"\\]|\$[^\{\"\\]|\\{ANY}|\$\\{ANY})*\$/\" |
+<STRING>([^\$\"\\]|\$[^\{\"\\]|\\{ANY}|\$\\{ANY})+ {
/* It is impossible to match strings ending with '$' with one
regex because trailing contexts are only valid at the end
of a rule. (A sane but undocumented limitation.) */
@@ -178,7 +179,7 @@ or { return OR_KW; }
yylval->e = new ExprIndStr("''");
return IND_STR;
}
-<IND_STRING>\'\'\\. {
+<IND_STRING>\'\'\\{ANY} {
yylval->e = unescapeStr(data->symbols, yytext + 2, yyleng - 2);
return IND_STR;
}
@@ -208,7 +209,7 @@ or { return OR_KW; }
\#[^\r\n]* /* single-line comments */
\/\*([^*]|\*+[^*/])*\*+\/ /* long comments */
-. return yytext[0];
+{ANY} return yytext[0];
}