diff options
Diffstat (limited to 'src/libexpr/lexer.l')
-rw-r--r-- | src/libexpr/lexer.l | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l index f3660ab43723..5b1ff0350cd1 100644 --- a/src/libexpr/lexer.l +++ b/src/libexpr/lexer.l @@ -87,8 +87,8 @@ static Expr * unescapeStr(SymbolTable & symbols, const char * s) ID [a-zA-Z\_][a-zA-Z0-9\_\'\-]* INT [0-9]+ FLOAT (([1-9][0-9]*\.[0-9]*)|(0?\.[0-9]+))([Ee][+-]?[0-9]+)? -PATH [a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+ -HPATH \~(\/[a-zA-Z0-9\.\_\-\+]+)+ +PATH [a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+\/? +HPATH \~(\/[a-zA-Z0-9\.\_\-\+]+)+\/? SPATH \<[a-zA-Z0-9\.\_\-\+]+(\/[a-zA-Z0-9\.\_\-\+]+)*\> URI [a-zA-Z][a-zA-Z0-9\+\-\.]*\:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']+ @@ -182,14 +182,22 @@ or { return OR_KW; } <INITIAL,INSIDE_DOLLAR_CURLY>{ -{PATH} { yylval->path = strdup(yytext); return PATH; } -{HPATH} { yylval->path = strdup(yytext); return HPATH; } +{PATH} { if (yytext[yyleng-1] == '/') + throw ParseError("path ‘%s’ has a trailing slash", yytext); + yylval->path = strdup(yytext); + return PATH; + } +{HPATH} { if (yytext[yyleng-1] == '/') + throw ParseError("path ‘%s’ has a trailing slash", yytext); + yylval->path = strdup(yytext); + return HPATH; + } {SPATH} { yylval->path = strdup(yytext); return SPATH; } {URI} { yylval->uri = strdup(yytext); return URI; } [ \t\r\n]+ /* eat up whitespace */ \#[^\r\n]* /* single-line comments */ -\/\*([^*]|\*[^\/])*\*\/ /* long comments */ +\/\*([^*]|\*+[^*/])*\*+\/ /* long comments */ . return yytext[0]; |