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.
|
Rev | Line | |
---|
[18310] | 1 | %{ |
---|
| 2 | /* |
---|
| 3 | |
---|
| 4 | A good bit of this file is taken from kdelibs/corba/kded/lex.l, which |
---|
| 5 | solved almost the same problem in a nice way. It was written by either |
---|
| 6 | David Faure or Steffan Hansen (unclear which). Don Comeau also |
---|
| 7 | deserves credit for teaching me how to use the whole lex/yacc thing in |
---|
| 8 | the 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 | |
---|
| 20 | static char* putSymbol (char *_name); |
---|
| 21 | static char* putString (char *_name); |
---|
| 22 | static int yywrap (void); |
---|
| 23 | int yylex (void); |
---|
| 24 | void initFlex (const char *_code); |
---|
| 25 | |
---|
| 26 | %} |
---|
| 27 | |
---|
| 28 | DIGIT [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 | |
---|
| 77 | static char * |
---|
| 78 | putSymbol (char *_name) |
---|
| 79 | { |
---|
| 80 | return g_strdup (_name); |
---|
| 81 | } |
---|
| 82 | |
---|
| 83 | static char * |
---|
| 84 | putString (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 | |
---|
| 112 | void |
---|
| 113 | initFlex (const char *_code) |
---|
| 114 | { |
---|
| 115 | yy_switch_to_buffer (yy_scan_string (_code)); |
---|
| 116 | } |
---|
| 117 | |
---|
| 118 | static int |
---|
| 119 | yywrap (void) |
---|
| 120 | { |
---|
| 121 | yy_delete_buffer (YY_CURRENT_BUFFER); |
---|
| 122 | return 1; |
---|
| 123 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.