source: trunk/third/bonobo-activation/server/activation-context-query-lexer.l @ 18311

Revision 18311, 2.5 KB checked in by ghudson, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18310, which included commits to RCS files with non-trunk default branches.
RevLine 
[18310]1%{
2/*
3
4A good bit of this file is taken from kdelibs/corba/kded/lex.l, which
5solved almost the same problem in a nice way. It was written by either
6David Faure or Steffan Hansen (unclear which). Don Comeau also
7deserves credit for teaching me how to use the whole lex/yacc thing in
8the beginning.
9
10  - ECL
11 */
12
13#include "activation-context-query.h"
14#include "activation-context-query-parser.h"
15
16#include <string.h>
17#include <stdlib.h>
18#define YY_NO_UNPUT
19
20static char* putSymbol (char *_name);
21static char* putString (char *_name);
22static int yywrap (void);
23int yylex (void);
24void initFlex (const char *_code);
25
26%}
27
28DIGIT   [0-9]
29
30%%
31
32"=="  { return P_EQ; }
33"!="  { return P_NEQ; }
34"<"   { return P_LT; }
35">"   { return P_GT; }
36"<="  { return P_LEQ; }
37">="  { return P_GEQ; }
38"&&"  { return P_AND; }
39"AND" { return P_AND; }
40"||"  { return P_OR; }
41"OR"  { return P_OR; }
42"~"   { return P_NOT; }
43"NOT" { return P_NOT; }
44"^^"  { return P_XOR; }
45"XOR" { return P_XOR; }
46
47"/"   { return P_DIVIDE; }
48"+"   { return P_ADD; }
49"-"   { return P_SUBTRACT; }
50"*"   { return P_MULTIPLY; }
51","   { return COMMA; }
52"."   { return PERIOD; }
53
54"("   { return LPAREN; }
55")"   { return RPAREN; }
56"["   { return LBRACKET; }
57"]"   { return RBRACKET; }
58
59"$"   { return P_DOLLAR; }
60
61(TRUE|true|True|YES|yes|Yes) { yylval.val_boolean = TRUE; return P_CONST_BOOLEAN; }
62(FALSE|false|False|NO|no|No) { yylval.val_boolean = FALSE; return P_CONST_BOOLEAN; }
63
64"'"(\\'|[^'])+"'" { yylval.val_string = putString (yytext); return P_CONST_STRING; }
65
66{DIGIT}+"."{DIGIT}+ { yylval.val_number = atof (yytext); return P_CONST_NUMBER; }
67{DIGIT}+ { yylval.val_number = atof (yytext); return P_CONST_NUMBER; }
68
69[a-zA-Z_][a-zA-Z0-9_:]* { yylval.val_string = putSymbol (yytext); return P_CONST_ID; }
70
71[ \t\n\r]+          /* eat up whitespace */
72
73. { return PARSE_ERROR; }
74
75%%
76
77static char *
78putSymbol (char *_name)
79{
80  return g_strdup (_name);
81}
82
83static char *
84putString (char *_str)
85{
86  int l = strlen (_str);
87  char *p = (char*) g_malloc (l + 1);
88  char *s = _str + 1;
89  char *d = p;
90  while (s < _str + l - 1)
91  {
92     if (*s != '\\') {
93        *d++ = *s++;
94     } else {
95        s++;
96        if (*s == '\\')
97          *d++ = '\\';
98        else if (*s == 'n')
99          *d++ = '\n';
100        else if (*s == 'r')
101          *d++ = '\r';
102        else if (*s == 't')
103          *d++ = '\t';
104        s++;
105     }
106  }
107
108  *d = 0;
109  return p;
110}
111
112void
113initFlex (const char *_code)
114{
115  yy_switch_to_buffer (yy_scan_string (_code));
116}
117
118static int
119yywrap (void)
120{
121  yy_delete_buffer (YY_CURRENT_BUFFER);
122  return 1;
123}
Note: See TracBrowser for help on using the repository browser.