diff options
author | Michi Henning <michi@zeroc.com> | 2009-12-07 14:48:27 +1000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2009-12-07 14:48:27 +1000 |
commit | 8d0c264fc218d2806eb610f325602353e58e6034 (patch) | |
tree | 939c96e2c7ab4ae0d8a3cd16fcba53574149dcc1 /cpp/src/IceGrid/Scanner.cpp | |
parent | Added Excel demo. (diff) | |
parent | 4424 - .NET FxCop Globalization Rules (diff) | |
download | ice-8d0c264fc218d2806eb610f325602353e58e6034.tar.bz2 ice-8d0c264fc218d2806eb610f325602353e58e6034.tar.xz ice-8d0c264fc218d2806eb610f325602353e58e6034.zip |
Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice
Diffstat (limited to 'cpp/src/IceGrid/Scanner.cpp')
-rw-r--r-- | cpp/src/IceGrid/Scanner.cpp | 237 |
1 files changed, 144 insertions, 93 deletions
diff --git a/cpp/src/IceGrid/Scanner.cpp b/cpp/src/IceGrid/Scanner.cpp index f5379d68444..2da7dc919fe 100644 --- a/cpp/src/IceGrid/Scanner.cpp +++ b/cpp/src/IceGrid/Scanner.cpp @@ -1,5 +1,5 @@ #include <IceUtil/Config.h> -/* A lexical scanner generated by flex */ +/* A lexical scanner generated by flex*/ /* Scanner skeleton version: * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ @@ -135,6 +135,15 @@ extern FILE *yyin, *yyout; #define unput(c) yyunput( c, yytext_ptr ) +/* Some routines like yy_flex_realloc() are emitted as static but are + not called by all lexers. This generates warnings in some compilers, + notably GCC. Arrange to suppress these. */ +#ifdef __GNUC__ +#define YY_MAY_BE_UNUSED __attribute__((unused)) +#else +#define YY_MAY_BE_UNUSED +#endif + /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). @@ -241,7 +250,7 @@ YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); +static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED; static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer @@ -408,12 +417,14 @@ typedef std::map<std::string, int> StringTokenMap; static StringTokenMap keywordMap; void initScanner(); +std::string parseDoubleQuotedString(); +std::string parseSingleQuotedString(); } #define YY_USER_INIT initScanner(); #define YY_ALWAYS_INTERACTIVE 1 -#line 416 "lex.yy.c" +#line 427 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -564,10 +575,10 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 50 "Scanner.l" +#line 52 "Scanner.l" -#line 570 "lex.yy.c" +#line 581 "lex.yy.c" if ( yy_init ) { @@ -652,7 +663,7 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 52 "Scanner.l" +#line 54 "Scanner.l" { // C++-style comment int c; @@ -665,7 +676,7 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 62 "Scanner.l" +#line 64 "Scanner.l" { // C-style comment while(true) @@ -693,7 +704,7 @@ YY_RULE_SETUP YY_BREAK case 3: YY_RULE_SETUP -#line 87 "Scanner.l" +#line 89 "Scanner.l" { size_t len = strlen(yytext); for(size_t i = 0; i < len; ++i) @@ -707,83 +718,17 @@ YY_RULE_SETUP YY_BREAK case 4: YY_RULE_SETUP -#line 98 "Scanner.l" +#line 100 "Scanner.l" { return ';'; } YY_BREAK case 5: YY_RULE_SETUP -#line 102 "Scanner.l" +#line 104 "Scanner.l" { // "..."-type strings - string s; - while(true) - { - char c = static_cast<char>(yyinput()); - if(c == '"') - { - break; - } - else if(c == EOF) - { - parser->warning("EOF in string"); - break; - } - else if(c == '\\') - { - char next = static_cast<char>(yyinput()); - switch(next) - { - case '\\': - case '"': - { - s += next; - break; - } - - case 'n': - { - s += '\n'; - break; - } - - case 'r': - { - s += '\r'; - break; - } - - case 't': - { - s += '\t'; - break; - } - - case 'v': - { - s += '\v'; - break; - } - - case 'f': - { - s += '\f'; - break; - } - - default: - { - s += c; - unput(next); - } - } - } - else - { - s += c; - } - } + string s = parseDoubleQuotedString(); yylvalp->clear(); yylvalp->push_back(s); return ICE_GRID_STRING; @@ -791,7 +736,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 176 "Scanner.l" +#line 112 "Scanner.l" { // '...'-type strings string s; @@ -819,25 +764,34 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 201 "Scanner.l" +#line 137 "Scanner.l" { // Simple strings string s; s += yytext[0]; while(true) { - char c = static_cast<char>(yyinput()); - if(c == EOF) - { - break; - } - else if(isspace(static_cast<unsigned char>(c)) || c == ';') - { + char c = static_cast<char>(yyinput()); + if(c == EOF) + { + break; + } + else if(c == '"') + { + s += parseDoubleQuotedString(); + continue; + } + else if(c == '\'') + { + s += parseSingleQuotedString(); + continue; + } + else if(isspace(static_cast<unsigned char>(c)) || c == ';') + { unput(c); - break; - } - - s += c; + break; + } + s += c; } yylvalp->clear(); @@ -849,10 +803,10 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 228 "Scanner.l" +#line 173 "Scanner.l" ECHO; YY_BREAK -#line 855 "lex.yy.c" +#line 809 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1734,7 +1688,7 @@ int main() return 0; } #endif -#line 228 "Scanner.l" +#line 173 "Scanner.l" namespace IceGrid { @@ -1787,4 +1741,101 @@ initScanner() keywordMap["disable"] = ICE_GRID_DISABLE; } +std::string +parseDoubleQuotedString() +{ + string s; + while(true) + { + char c = static_cast<char>(yyinput()); + if(c == '"') + { + break; + } + else if(c == EOF) + { + parser->warning("EOF in string"); + break; + } + else if(c == '\\') + { + char next = static_cast<char>(yyinput()); + switch(next) + { + case '\\': + case '"': + { + s += next; + break; + } + + case 'n': + { + s += '\n'; + break; + } + + case 'r': + { + s += '\r'; + break; + } + + case 't': + { + s += '\t'; + break; + } + + case 'v': + { + s += '\v'; + break; + } + + case 'f': + { + s += '\f'; + break; + } + + default: + { + s += c; + unput(next); + } + } + } + else + { + s += c; + } + } + return s; +} + +std::string +parseSingleQuotedString() +{ + string s; + while(true) + { + char c = static_cast<char>(yyinput()); + if(c == '\'') + { + break; + } + else if(c == EOF) + { + parser->warning("EOF in string"); + break; + } + else + { + s += c; + } + } + return s; +} + } |