aboutsummaryrefslogtreecommitdiff
path: root/src/build.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/build.l')
-rw-r--r--src/build.l26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/build.l b/src/build.l
index 6a80f45..3a457b1 100644
--- a/src/build.l
+++ b/src/build.l
@@ -7,13 +7,14 @@
7std::string strbuf; 7std::string strbuf;
8%} 8%}
9 9
10%x regexp
10%x strsq 11%x strsq
11%x strdq 12%x strdq
12%x comment 13%x comment
13%option noyywrap nounput batch debug 14%option noyywrap nounput batch debug
14 15
15%{ 16%{
16# define YY_USER_ACTION yylloc->columns (yyleng); 17//# define YY_USER_ACTION yylloc->columns (yyleng);
17%} 18%}
18%% 19%%
19 20
@@ -38,16 +39,27 @@ std::string strbuf;
38"perform" return TOK_PERFORM; 39"perform" return TOK_PERFORM;
39"produces" return TOK_PRODUCES; 40"produces" return TOK_PRODUCES;
40"command" return TOK_COMMAND; 41"command" return TOK_COMMAND;
42"check" return TOK_CHECK;
41 43
42"..."\n /* elipsis line continuation */ 44"..."\n /* elipsis line continuation */
43\n+ return TOX_EOL; 45\n+ return TOK_EOL;
44[ \t\r]* /* whitespace */ 46[ \t\r]* /* whitespace */
45 47
46\/\/.* /* single line comment */ 48"/" {
49 BEGIN( regexp );
50 strbuf = "";
51}
52<regexp>[^\n/]* strbuf += yytext;
53<regexp>"/" {
54 BEGIN( INITIAL );
55 yylval->strval = stringdup( strbuf.c_str() );
56 return REGEXP;
57}
58
47"#".* /* single line comment */ 59"#".* /* single line comment */
48 60
49[^ \t\r\n\'\"]+ { 61[^ \t\r\n\'\":=,.]+ {
50 yylval.strval = stringdup( yytext ); 62 yylval->strval = stringdup( yytext );
51 return STRING; 63 return STRING;
52} 64}
53 65
@@ -86,11 +98,13 @@ std::string strbuf;
86 return STRING; 98 return STRING;
87} 99}
88 100
101%%
89 102
90void Builder::scanBegin() 103void Builder::scanBegin()
91{ 104{
105 yy_flex_debug = false;
92 if( !(yyin = fopen( file.c_str(), "r" )) ) 106 if( !(yyin = fopen( file.c_str(), "r" )) )
93 error( std::string("cannot open ") + file ); 107 fprintf( stderr, "cannot open %s\n", file.c_str() );
94} 108}
95 109
96void Builder::scanEnd() 110void Builder::scanEnd()