%{ // ********************************************************************** // // Copyright (c) 2001 // Mutable Realms, Inc. // Huntsville, AL, USA // // All Rights Reserved // // ********************************************************************** #include #include #include using namespace std; using namespace Ice; using namespace IcePack; #define YY_INPUT(buf, result, maxSize) parser->getInput(buf, result, maxSize) %} WS [ \t\v\f\r] NL [\n] %option noyywrap %% ^"#"[[:blank:]]*[[:digit:]]+[[:blank:]]*$ { parser->scanPosition(yytext); } ^"#"[[:blank:]]*[[:digit:]]+[[:blank:]]+"\""[^\"]*"\"".*$ { parser->scanPosition(yytext); } ^"#"[[:blank:]]*"line"[[:blank:]]+[[:digit:]]+[[:blank:]]*$ { parser->scanPosition(yytext); } ^"#"[[:blank:]]*"line"[[:blank:]]+[[:digit:]]+[[:blank:]]+"\""[^\"]*"\"".*$ { parser->scanPosition(yytext); } "//" { // C++-style comment int c; do { c = yyinput(); if(c == '\n') { parser->nextLine(); } } while(c != '\n' && c != EOF); } "/*" { // C-style comment while(true) { int c = yyinput(); if(c == '\n') { parser->nextLine(); } else if(c == '*') { int next = yyinput(); if(next == '/') { break; } else { unput(next); } } else if(c == EOF) { parser->warning("EOF in comment"); break; } } } "help" { return ICE_PACK_HELP; } "quit"|"exit" { return ICE_PACK_EXIT; } "server" { return ICE_PACK_SERVER; } "adapter" { return ICE_PACK_ADAPTER; } "add" { return ICE_PACK_ADD; } "remove" { return ICE_PACK_REMOVE; } "list" { return ICE_PACK_LIST; } "shutdown" { return ICE_PACK_SHUTDOWN; } "describe" { return ICE_PACK_DESCRIBE; } "state" { return ICE_PACK_STATE; } "endpoints" { return ICE_PACK_ENDPOINTS; } "start" { return ICE_PACK_START; } "adapters" { return ICE_PACK_ADAPTERS; } "options" { return ICE_PACK_OPTIONS; } "{" { return ICE_PACK_OPEN_BRACKET; } "}" { return ICE_PACK_CLOSE_BRACKET; } {WS}*(\\{WS}*{NL})? { int len = strlen(yytext); for(int i = 0; i < len; ++i) { if(yytext[i] == '\\') { parser->continueLine(); } else if(yytext[i] == '\n') { parser->nextLine(); } } } {NL}|; { int len = strlen(yytext); for(int i = 0; i < len; ++i) { if(yytext[i] == '\n') { parser->nextLine(); } } return ';'; } \" { // "..."-type strings string s; while(true) { char c = static_cast(yyinput()); if(c == '"') { break; } else if(c == EOF) { parser->warning("EOF in string"); break; } else if(c == '\n') { s += c; parser->nextLine(); } else if(c == '\\') { char next = static_cast(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; } } yylvalp->clear(); yylvalp->push_back(s); return ICE_PACK_STRING; } \' { // '...'-type strings string s; while(true) { char c = static_cast(yyinput()); if(c == '\'') { break; } else if(c == EOF) { parser->warning("EOF in string"); break; } else if(c == '\n') { s += c; parser->nextLine(); } else { s += c; } } yylvalp->clear(); yylvalp->push_back(s); return ICE_PACK_STRING; } . { // Simple strings string s; s += yytext[0]; while(true) { char c = static_cast(yyinput()); if(c == EOF) { break; } else if(isspace(c) || c == ';') { unput(c); break; } s += c; } yylvalp->clear(); yylvalp->push_back(s); return ICE_PACK_STRING; } %%