From 5381b25c51475c0c7a2f39e9f6efa623f621ef3e Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 13 Oct 2016 13:08:31 +0200 Subject: Continue work on testscript parser --- build2/test/script/lexer.cxx | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'build2/test/script/lexer.cxx') diff --git a/build2/test/script/lexer.cxx b/build2/test/script/lexer.cxx index 84be7c1..e0a3272 100644 --- a/build2/test/script/lexer.cxx +++ b/build2/test/script/lexer.cxx @@ -25,24 +25,24 @@ namespace build2 { case lexer_mode::script_line: { - s1 = "=+!|&<> $()#\t\n"; - s2 = " == "; + s1 = "=+!|&<> $(#\t\n"; + s2 = " == "; break; } case lexer_mode::variable_line: { // Like value except we don't recognize {. // - s1 = " $()[]#\t\n"; - s2 = " "; + s1 = " $([]#\t\n"; + s2 = " "; break; } case lexer_mode::test_line: { // As script_line but without variable assignments. // - s1 = "=!|&<> $()#\t\n"; - s2 = "== "; + s1 = "=!|&<> $(#\t\n"; + s2 = "== "; break; } case lexer_mode::command_line: @@ -54,6 +54,16 @@ namespace build2 s = false; break; } + case lexer_mode::here_line: + { + // This one is like a double-quoted string except it treats + // newlines as a separator. + // + s1 = "$(\n"; + s2 = " "; + s = false; + break; + } case lexer_mode::single_quoted: case lexer_mode::double_quoted: quoted_ = true; @@ -77,8 +87,9 @@ namespace build2 case lexer_mode::script_line: case lexer_mode::variable_line: case lexer_mode::test_line: - case lexer_mode::command_line: return next_line (); - default: return base_lexer::next_impl (); + case lexer_mode::command_line: + case lexer_mode::here_line: return next_line (); + default: return base_lexer::next_impl (); } } @@ -110,7 +121,6 @@ namespace build2 // case '$': return token (type::dollar, sep, ln, cn); case '(': return token (type::lparen, sep, ln, cn); - case ')': return token (type::rparen, sep, ln, cn); } } -- cgit v1.1