summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/Scanner.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2012-05-16 17:06:00 -0700
committerMark Spruiell <mes@zeroc.com>2012-05-16 17:06:00 -0700
commit1c6024e41f697d61b2727dc60c8aa6f62e9f5660 (patch)
treea1fe8e5ff322f02adef32c3edaf48b3d947cd6f0 /cpp/src/Slice/Scanner.cpp
parent* Ruby port of sliced/compact/preserved (diff)
downloadice-1c6024e41f697d61b2727dc60c8aa6f62e9f5660.tar.bz2
ice-1c6024e41f697d61b2727dc60c8aa6f62e9f5660.tar.xz
ice-1c6024e41f697d61b2727dc60c8aa6f62e9f5660.zip
parser support for optional data members
Diffstat (limited to 'cpp/src/Slice/Scanner.cpp')
-rw-r--r--cpp/src/Slice/Scanner.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/cpp/src/Slice/Scanner.cpp b/cpp/src/Slice/Scanner.cpp
index 7cf7bd5ce4e..40aafc1f528 100644
--- a/cpp/src/Slice/Scanner.cpp
+++ b/cpp/src/Slice/Scanner.cpp
@@ -1035,12 +1035,24 @@ YY_RULE_SETUP
{
return ICE_IDENT_OP;
}
- return checkKeyword(ident->v) == ICE_IDENTIFIER ? ICE_IDENT_OP : ICE_KEYWORD_OP;
+ int st = checkKeyword(ident->v);
+ if(st == ICE_IDENTIFIER)
+ {
+ return ICE_IDENT_OP;
+ }
+ else if(st == ICE_OPTIONAL)
+ {
+ return ICE_OPTIONAL_OP;
+ }
+ else
+ {
+ return ICE_KEYWORD_OP;
+ }
}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 191 "Scanner.l"
+#line 203 "Scanner.l"
{
BEGIN(MAINSCAN);
StringTokPtr ident = new StringTok;
@@ -1051,7 +1063,7 @@ YY_RULE_SETUP
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 199 "Scanner.l"
+#line 211 "Scanner.l"
{
BEGIN(MAINSCAN);
StringTokPtr str = new StringTok;
@@ -1215,7 +1227,7 @@ YY_RULE_SETUP
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 360 "Scanner.l"
+#line 372 "Scanner.l"
{
BEGIN(MAINSCAN);
IntegerTokPtr itp = new IntegerTok;
@@ -1234,7 +1246,7 @@ YY_RULE_SETUP
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 376 "Scanner.l"
+#line 388 "Scanner.l"
{
BEGIN(MAINSCAN);
errno = 0;
@@ -1268,7 +1280,7 @@ YY_RULE_SETUP
case 17:
/* rule 17 can match eol */
YY_RULE_SETUP
-#line 406 "Scanner.l"
+#line 418 "Scanner.l"
{
// Ignore white-space
@@ -1284,7 +1296,7 @@ YY_RULE_SETUP
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 419 "Scanner.l"
+#line 431 "Scanner.l"
{
// Ignore UTF-8 BOM, rule only active when parsing start of file.
@@ -1293,7 +1305,7 @@ YY_RULE_SETUP
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 425 "Scanner.l"
+#line 437 "Scanner.l"
{
BEGIN(MAINSCAN);
if(slice_text[0] < 32 || slice_text[0] > 126)
@@ -1312,10 +1324,10 @@ YY_RULE_SETUP
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 441 "Scanner.l"
+#line 453 "Scanner.l"
ECHO;
YY_BREAK
-#line 1318 "lex.yy.c"
+#line 1330 "lex.yy.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(BOMSCAN):
case YY_STATE_EOF(MAINSCAN):
@@ -1396,7 +1408,7 @@ case YY_STATE_EOF(MAINSCAN):
{
(yy_did_buffer_switch_on_eof) = 0;
- if ( slice_wrap( ) )
+ if ( slice_wrap(0) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -1732,7 +1744,7 @@ static int yy_get_next_buffer (void)
case EOB_ACT_END_OF_FILE:
{
- if ( slice_wrap( ) )
+ if ( slice_wrap(0) )
return EOF;
if ( ! (yy_did_buffer_switch_on_eof) )
@@ -2315,7 +2327,7 @@ void slice_free (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 441 "Scanner.l"
+#line 453 "Scanner.l"
@@ -2356,6 +2368,7 @@ initScanner()
keywordMap["false"] = ICE_FALSE;
keywordMap["true"] = ICE_TRUE;
keywordMap["idempotent"] = ICE_IDEMPOTENT;
+ keywordMap["optional"] = ICE_OPTIONAL;
}
//