summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Scanner.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2009-12-07 14:48:27 +1000
committerMichi Henning <michi@zeroc.com>2009-12-07 14:48:27 +1000
commit8d0c264fc218d2806eb610f325602353e58e6034 (patch)
tree939c96e2c7ab4ae0d8a3cd16fcba53574149dcc1 /cpp/src/IceGrid/Scanner.cpp
parentAdded Excel demo. (diff)
parent4424 - .NET FxCop Globalization Rules (diff)
downloadice-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.cpp237
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;
+}
+
}