summaryrefslogtreecommitdiff
path: root/ACE/TAO/orbsvcs/PSS/PSDL.ll
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/orbsvcs/PSS/PSDL.ll')
-rw-r--r--ACE/TAO/orbsvcs/PSS/PSDL.ll209
1 files changed, 209 insertions, 0 deletions
diff --git a/ACE/TAO/orbsvcs/PSS/PSDL.ll b/ACE/TAO/orbsvcs/PSS/PSDL.ll
new file mode 100644
index 00000000000..50f292ce752
--- /dev/null
+++ b/ACE/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;
+}