4 // ========================================================================
13 // Carlos O'Ryan <coryan@uci.edu> based on previous work by
14 // Seth Widoff <sbw1@cs.wustl.edu>
16 // ========================================================================
18 #include "ace/ETCL/ETCL_Interpreter.h"
19 #include "ace/ETCL/ETCL_y.h"
21 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
23 static const char * extract_string(char*);
27 #ifdef CONSTRAINT_DEBUG
28 #define YY_LEX_DEBUG OS::fprintf(stderr, "%s\n", yytext)
29 #endif /* CONSTRAINT_DEBUG */
31 #define YY_DECL int ETCL_yylex (ETCL_YYSTYPE *lvalp, void* state)
41 alpha_num ({letter}|{digit})
43 float ({digit}*\.{digit}+)([eE][-+]?{digit}+)?
44 string '(([^'\\]*)|([^'\\]*\\')|([^'\\]*\\\\))*'
45 base {letter}({alpha_num}|[_])*
51 min { YY_LEX_DEBUG; return ETCL_MIN; }
52 max { YY_LEX_DEBUG; return ETCL_MAX; }
53 first { YY_LEX_DEBUG; return ETCL_FIRST; }
54 random { YY_LEX_DEBUG; return ETCL_RANDOM; }
55 with { YY_LEX_DEBUG; return ETCL_WITH; }
56 exist { YY_LEX_DEBUG; return ETCL_EXIST; }
57 not { YY_LEX_DEBUG; return ETCL_NOT; }
58 and { YY_LEX_DEBUG; return ETCL_AND; }
59 or { YY_LEX_DEBUG; return ETCL_OR; }
60 in { YY_LEX_DEBUG; return ETCL_IN; }
61 "~" { YY_LEX_DEBUG; return ETCL_TWIDDLE; }
62 "+" { YY_LEX_DEBUG; return ETCL_PLUS; }
63 "-" { YY_LEX_DEBUG; return ETCL_MINUS; }
64 "*" { YY_LEX_DEBUG; return ETCL_MULT; }
65 "/" { YY_LEX_DEBUG; return ETCL_DIV; }
66 "<" { YY_LEX_DEBUG; return ETCL_LT; }
67 "<=" { YY_LEX_DEBUG; return ETCL_LE; }
68 ">" { YY_LEX_DEBUG; return ETCL_GT; }
69 ">=" { YY_LEX_DEBUG; return ETCL_GE; }
70 "==" { YY_LEX_DEBUG; return ETCL_EQ; }
71 "!=" { YY_LEX_DEBUG; return ETCL_NE; }
72 "(" { YY_LEX_DEBUG; return ETCL_LPAREN; }
73 ")" { YY_LEX_DEBUG; return ETCL_RPAREN; }
74 "$" { YY_LEX_DEBUG; return ETCL_DOLLAR; }
75 "." { YY_LEX_DEBUG; return ETCL_DOT; }
76 "default" { YY_LEX_DEBUG; return ETCL_DEFAULT; }
77 "_d" { YY_LEX_DEBUG; return ETCL_DISCRIMINANT; }
78 "_type_id" { YY_LEX_DEBUG; return ETCL_TYPE_ID; }
79 "_repos_id" { YY_LEX_DEBUG; return ETCL_REPOS_ID; }
80 "_length" { YY_LEX_DEBUG; return ETCL_LENGTH; }
81 "[" { YY_LEX_DEBUG; return ETCL_LBRA; }
82 "]" { YY_LEX_DEBUG; return ETCL_RBRA; }
85 new ETCL_Literal_Constraint ((CORBA::Boolean) 1);
86 YY_LEX_DEBUG; return ETCL_BOOLEAN;
90 new ETCL_Literal_Constraint ((CORBA::Boolean) 0);
91 YY_LEX_DEBUG; return ETCL_BOOLEAN;
95 new ETCL_Literal_Constraint (ACE_OS::atoi (yytext));
96 YY_LEX_DEBUG; return ETCL_INTEGER;
100 sscanf (yytext, "%lf", &v);
102 new ETCL_Literal_Constraint (v);
103 YY_LEX_DEBUG; return ETCL_FLOAT;
107 new ETCL_Literal_Constraint (extract_string (yytext));
108 YY_LEX_DEBUG; return ETCL_STRING;
112 new ETCL_Identifier (yytext);
113 YY_LEX_DEBUG; return ETCL_IDENT;
116 YY_LEX_DEBUG; break; // Ignore
119 YY_LEX_DEBUG; break; // @@ TODO
124 extract_string(char* str)
127 for (char * i = str + 1; *i != '\''; ++i, ++t)
158 ACE_END_VERSIONED_NAMESPACE_DECL