diff options
Diffstat (limited to 'TAO/orbsvcs/PSS/PSDL.ll')
-rw-r--r-- | TAO/orbsvcs/PSS/PSDL.ll | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/TAO/orbsvcs/PSS/PSDL.ll b/TAO/orbsvcs/PSS/PSDL.ll new file mode 100644 index 00000000000..50f292ce752 --- /dev/null +++ b/TAO/orbsvcs/PSS/PSDL.ll @@ -0,0 +1,209 @@ +%option noyywrap + +%{ +// $Id$ +// ======================================================================== +// +// = LIBRARY +// orbsvcs/PSS +// +// = FILENAME +// PSDL.ll +// +// = AUTHOR +// Priyanka Gontla <gontla_p@ociweb.com> +// ======================================================================== + +#include "ace/OS.h" + +#include "PSDL_Interpreter.h" +#include "PSDL_Node.h" +#include "PSDL_y.h" + +static const char * extract_string(char*); + +//#define TAO_YY_LEX_DEBUG + +#define TAO_YY_LEX_DEBUG ACE_OS::fprintf(stderr, "%s\n", yytext) + +#define YY_DECL int TAO_PSDL_yylex (TAO_PSDL_Node **lvalp, void* ) + +#define YY_BREAK +#define YY_NO_UNPUT + +%} + +white_space \t +letter [a-zA-Z] +digit [0-9] +alpha_num ({letter}|{digit}) +integer {digit}+ +float ({digit}*\.{digit}+)([eE][-+]?{digit}+)? +string '(([^'\\]*)|([^'\\]*\\')|([^'\\]*\\\\))*' +base {letter}({alpha_num}|[_])* +ident {base}|\\{base} +newline \n + +%% + +";" { TAO_YY_LEX_DEBUG; return TAO_PSDL_SEMI; } +":" { TAO_YY_LEX_DEBUG; return TAO_PSDL_COLON; } +"{" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OPEN_CURLY_BRACE; } +"}" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CLOSE_CURLY_BRACE; } +"(" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OPEN_BRACE; } +")" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CLOSE_BRACE; } +"<" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OPEN_ANGULAR_BRACE; } +">" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CLOSE_ANGULAR_BRACE; } +"," { TAO_YY_LEX_DEBUG; return TAO_PSDL_COMMA; } +"+" { TAO_YY_LEX_DEBUG; return TAO_PSDL_PLUS; } +"-" { TAO_YY_LEX_DEBUG; return TAO_PSDL_MINUS; } +"^" { TAO_YY_LEX_DEBUG; return TAO_PSDL_XOR; } +"&" { TAO_YY_LEX_DEBUG; return TAO_PSDL_AND; } +"*" { TAO_YY_LEX_DEBUG; return TAO_PSDL_MULT; } +">>" { TAO_YY_LEX_DEBUG; return TAO_PSDL_RIGHT_SHIFT; } +"<<" { TAO_YY_LEX_DEBUG; return TAO_PSDL_LEFT_SHIFT; } +"/" { TAO_YY_LEX_DEBUG; return TAO_PSDL_DIV; } +"%" { TAO_YY_LEX_DEBUG; return TAO_PSDL_PERCENT; } +"~" { TAO_YY_LEX_DEBUG; return TAO_PSDL_TILDA; } +"=" { TAO_YY_LEX_DEBUG; return TAO_PSDL_EQUAL; } +"|" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OR; } +"::" { TAO_YY_LEX_DEBUG; return TAO_PSDL_DOUBLE_COLON; } +"[" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OPEN_SQUARE_BRACE; } +"]" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CLOSE_SQUARE_BRACE; } +"in" { TAO_YY_LEX_DEBUG; return TAO_PSDL_IN; } +"as" { TAO_YY_LEX_DEBUG; return TAO_PSDL_AS; } +"of" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OF; } +"key" { TAO_YY_LEX_DEBUG; return TAO_PSDL_KEY; } +"ref" { TAO_YY_LEX_DEBUG; return TAO_PSDL_REF; } +"any" { TAO_YY_LEX_DEBUG; return TAO_PSDL_ANY; } +"out" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OUT; } +"case" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CASE; } +"inout" { TAO_YY_LEX_DEBUG; return TAO_PSDL_INOUT; } +"catalog" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CATALOG; } +"provides" { TAO_YY_LEX_DEBUG; return TAO_PSDL_PROVIDES; } +"char" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CHAR; } +"implements" { TAO_YY_LEX_DEBUG; return TAO_PSDL_IMPLEMENTS; } +"scope" { TAO_YY_LEX_DEBUG; return TAO_PSDL_SCOPE; } +"stores" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STORES; } +"state" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STATE; } +"abstract" { TAO_YY_LEX_DEBUG; return TAO_PSDL_ABSTRACT; } +"storagetype" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STORAGETYPE; } +"storagehome" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STORAGEHOME; } +"strong" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STRONG; } +"primary" { TAO_YY_LEX_DEBUG; return TAO_PSDL_PRIMARY; } +"readonly" { TAO_YY_LEX_DEBUG; return TAO_PSDL_READONLY; } +"union" { TAO_YY_LEX_DEBUG; return TAO_PSDL_UNION; } +"switch" { TAO_YY_LEX_DEBUG; return TAO_PSDL_SWITCH; } +"wchar" { TAO_YY_LEX_DEBUG; return TAO_PSDL_WCHAR; } +"boolean" { TAO_YY_LEX_DEBUG; return TAO_PSDL_BOOLEAN; } +"octet" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OCTET; } +"Object" { TAO_YY_LEX_DEBUG; return TAO_PSDL_OBJECT; } +"struct" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STRUCT; } +"default" { TAO_YY_LEX_DEBUG; return TAO_PSDL_DEFAULT; } +"float" { TAO_YY_LEX_DEBUG; return TAO_PSDL_FLOAT; } +"double" { TAO_YY_LEX_DEBUG; return TAO_PSDL_DOUBLE; } +"long" { TAO_YY_LEX_DEBUG; return TAO_PSDL_LONG; } +"short" { TAO_YY_LEX_DEBUG; return TAO_PSDL_SHORT; } +"unsigned" { TAO_YY_LEX_DEBUG; return TAO_PSDL_UNSIGNED; } +"typedef" { TAO_YY_LEX_DEBUG; return TAO_PSDL_TYPEDEF; } +"native" { TAO_YY_LEX_DEBUG; return TAO_PSDL_NATIVE; } +"module" { TAO_YY_LEX_DEBUG; return TAO_PSDL_MODULE; } +"oneway" { TAO_YY_LEX_DEBUG; return TAO_PSDL_ONEWAY; } +"const" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CONST; } +"void" { TAO_YY_LEX_DEBUG; return TAO_PSDL_VOID; } +"raises" { TAO_YY_LEX_DEBUG; return TAO_PSDL_RAISES; } +"context" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CONTEXT; } +"fixed" { TAO_YY_LEX_DEBUG; return TAO_PSDL_FIXED; } +"ValueBase" { TAO_YY_LEX_DEBUG; return TAO_PSDL_VALUEBASE; } +"exception" { TAO_YY_LEX_DEBUG; return TAO_PSDL_EXCEPTION; } +"interface" { TAO_YY_LEX_DEBUG; return TAO_PSDL_INTERFACE; } +"local" { TAO_YY_LEX_DEBUG; return TAO_PSDL_LOCAL; } +"valuetype" { TAO_YY_LEX_DEBUG; return TAO_PSDL_VALUETYPE; } +"custom" { TAO_YY_LEX_DEBUG; return TAO_PSDL_CUSTOM; } +"truncatable" { TAO_YY_LEX_DEBUG; return TAO_PSDL_TRUNCATABLE; } +"supports" { TAO_YY_LEX_DEBUG; return TAO_PSDL_SUPPORTS; } +"string" { TAO_YY_LEX_DEBUG; return TAO_PSDL_STRING; } +"wstring" { TAO_YY_LEX_DEBUG; return TAO_PSDL_WSTRING; } +"attribute" { TAO_YY_LEX_DEBUG; return TAO_PSDL_ATTRIBUTE; } +"enum" { TAO_YY_LEX_DEBUG; return TAO_PSDL_ENUM; } +"sequence" { TAO_YY_LEX_DEBUG; return TAO_PSDL_SEQUENCE; } +"private" { TAO_YY_LEX_DEBUG; return TAO_PSDL_PRIVATE; } +"public" { TAO_YY_LEX_DEBUG; return TAO_PSDL_PUBLIC; } +"factory" { TAO_YY_LEX_DEBUG; return TAO_PSDL_FACTORY; } +"TRUE" { + *lvalp = + new TAO_PSDL_Literal ((CORBA::Boolean) 1); + TAO_YY_LEX_DEBUG; return TAO_PSDL_TRUE; + } +"FALSE" { + *lvalp = + new TAO_PSDL_Literal ((CORBA::Boolean) 0); + TAO_YY_LEX_DEBUG; return TAO_PSDL_FALSE; + } +{integer} { + *lvalp = + new TAO_PSDL_Literal (ACE_OS::atoi (yytext)); + TAO_YY_LEX_DEBUG; return TAO_PSDL_INTEGER; + } +{float} { + double v; + sscanf (yytext, "%lf", &v); + *lvalp = + new TAO_PSDL_Literal (v); + TAO_YY_LEX_DEBUG; return TAO_PSDL_FLOATING_PT; + } +{ident} { + *lvalp = + new TAO_PSDL_Identifier (yytext); + TAO_YY_LEX_DEBUG; return TAO_PSDL_IDENT; + } +{string} { + *lvalp = + new TAO_PSDL_Literal (extract_string (yytext)); + TAO_YY_LEX_DEBUG; return TAO_PSDL_STRING; + } +{white_space} { + TAO_YY_LEX_DEBUG; break; // Ignore + } +{newline} { + TAO_YY_LEX_DEBUG; break; // Ignore + } +. { + TAO_YY_LEX_DEBUG; break; // @@ TODO + } +%% + +const char* +extract_string(char* str) +{ + char *t = str; + for (char * i = str + 1; *i != '\''; ++i, ++t) + { + if (*i == '\\') + { + ++i; + if (*i == 0) + return 0; + else if (*i == 't') + *t = '\t'; + else if (*i == 'n') + *t = '\n'; + else if (*i == '\\') + *t = '\\'; + else + *t = *i; + continue; + } + + *t = *i; + } + + *t = '\0'; + return str; +} + +int +yywrap () +{ + return 1; +} |