From 8120b6fb8a4924f8ae717bba9bbda4a2f89e2141 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 19 Jan 2016 20:33:32 +0100 Subject: Revert "don't abort when given unmatched '}' with 'start-condition stack underflow'. This fixes #751" This reverts commit 8d22b26448a091c76ab972c0b0603daac5e255e4. It breaks Nixpkgs: $ nix-env -qa error: syntax error, unexpected IND_STR, expecting '}', at /home/eelco/Dev/nixpkgs-stable/pkgs/top-level/python-packages.nix:7605:8 --- src/libexpr/lexer.l | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l index 791b72a8b52c..1f2957ec71ad 100644 --- a/src/libexpr/lexer.l +++ b/src/libexpr/lexer.l @@ -8,7 +8,6 @@ %x STRING %x IND_STRING -%x INSIDE_DOLLAR_CURLY %{ @@ -94,8 +93,6 @@ URI [a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~ %% -{ - if { return IF; } then { return THEN; } @@ -127,15 +124,11 @@ or { return OR_KW; } return INT; } -\$\{ { PUSH_STATE(INSIDE_DOLLAR_CURLY); return DOLLAR_CURLY; } -\{ { return '{'; } -} - -\} { return '}'; } -\} { POP_STATE(); return '}'; } - -\" { PUSH_STATE(STRING); return '"'; } +\$\{ { PUSH_STATE(INITIAL); return DOLLAR_CURLY; } +\{ { PUSH_STATE(INITIAL); return '{'; } +\} { POP_STATE(); return '}'; } +\" { PUSH_STATE(STRING); return '"'; } ([^\$\"\\]|\$[^\{\"\\]|\\.|\$\\.)*\$/\" | ([^\$\"\\]|\$[^\{\"\\]|\\.|\$\\.)+ { /* It is impossible to match strings ending with '$' with one @@ -144,11 +137,11 @@ or { return OR_KW; } yylval->e = unescapeStr(data->symbols, yytext); return STR; } -\$\{ { PUSH_STATE(INSIDE_DOLLAR_CURLY); return DOLLAR_CURLY; } +\$\{ { PUSH_STATE(INITIAL); return DOLLAR_CURLY; } \" { POP_STATE(); return '"'; } . return yytext[0]; /* just in case: shouldn't be reached */ -\'\'(\ *\n)? { PUSH_STATE(IND_STRING); return IND_STRING_OPEN; } +\'\'(\ *\n)? { PUSH_STATE(IND_STRING); return IND_STRING_OPEN; } ([^\$\']|\$[^\{\']|\'[^\'\$])+ { yylval->e = new ExprIndStr(yytext); return IND_STR; @@ -165,7 +158,7 @@ or { return OR_KW; } yylval->e = unescapeStr(data->symbols, yytext + 2); return IND_STR; } -\$\{ { PUSH_STATE(INSIDE_DOLLAR_CURLY); return DOLLAR_CURLY; } +\$\{ { PUSH_STATE(INITIAL); return DOLLAR_CURLY; } \'\' { POP_STATE(); return IND_STRING_CLOSE; } \' { yylval->e = new ExprIndStr("'"); @@ -173,8 +166,6 @@ or { return OR_KW; } } . return yytext[0]; /* just in case: shouldn't be reached */ -{ - {PATH} { yylval->path = strdup(yytext); return PATH; } {HPATH} { yylval->path = strdup(yytext); return HPATH; } {SPATH} { yylval->path = strdup(yytext); return SPATH; } @@ -186,7 +177,6 @@ or { return OR_KW; } . return yytext[0]; -} %% -- cgit 1.4.1