source: libabac/rt2.l @ a9494ad

mei_rt2mei_rt2_fix_1meiyap-rt1rt2
Last change on this file since a9494ad was 718ad924, checked in by Mei <mei@…>, 12 years ago

able to parse rt1 without condition
updated examples

  • Property mode set to 100644
File size: 3.2 KB
Line 
1%{
2#include <stdio.h>
3#include <string.h>
4#include "rt2.h"
5
6static int debug=0;
7
8/* with yacc */
9extern YYSTYPE yylval;
10/* with just lex */
11/* YYSTYPE yylval; */
12
13/* if using canned fixed test string */
14char INPUT_LINE[] = "usc.playground <- usc.employee.friend";
15char *yyfptr = INPUT_LINE; /* default */
16
17#undef YY_INPUT
18#define YY_INPUT(buf,result,max_size) \
19    { \
20    if(yyfptr != NULL) { \
21      char* c = strncpy(buf,yyfptr,max_size); \
22      if (max_size > 0) buf[max_size-1] = '\0'; \
23      if(strlen(yyfptr) > max_size) yyfptr = yyfptr + max_size-1;  \
24        else yyfptr=NULL; \
25      result = (c == NULL ) ? YY_NULL : strlen(buf); \
26      } else { \
27         buf[0] = '\0'; \
28         result = YY_NULL; \
29    } \
30    }
31
32void abac_reset_yyfptr(char *str) {
33    yyfptr=str;
34}
35
36char* abac_get_yyfptr() {
37    return yyfptr;
38}
39
40/* if using external file input, output */
41void abac_reset_yyin(FILE *new_yyin) {
42    yyin=new_yyin;
43}
44
45void abac_reset_yyout(FILE *new_yyout) {
46    if(yyout) {
47      fflush(yyout);
48      fclose(yyout);
49    }
50    yyout=new_yyout;
51}
52
53void abac_flush_yyout() {
54    if(yyout)
55      fflush(yyout);
56}
57
58FILE *abac_get_yyin() {
59    if(yyin) return yyin;
60    else return stdin;
61}
62FILE *abac_get_yyout() {
63    if(yyout) return yyout;
64    else return stdout;
65}
66
67/* XXX need to add param's possible format and break it out from IDEN next */
68%}
69%%
70keyid                       { yylval.string=strdup(yytext);
71                              if(debug) fprintf(yyout," KEYTYPE ");
72                              return KEYTYPE; }
73role                        { if(debug) fprintf(yyout," ROLE ");
74                              return ROLE; }
75principal                   { if(debug) fprintf(yyout," PRINCIPAL ");
76                              return PRINCIPAL; }
77[a-zA-Z0-9][_a-zA-Z0-9]*    { yylval.string=strdup(yytext);
78                              if(debug) fprintf(yyout," IDEN ");
79                                return IDEN; }
80\<-                         { if(debug) fprintf(yyout," DERIVE ");
81                                return DERIVE; }
82\.                          { if(debug) fprintf(yyout, " DOT " );
83                                return DOT; }
84&                           { if(debug) fprintf(yyout, " AND " );
85                                return AND; }
86,                           { if(debug) fprintf(yyout, " COMMA ");
87                                return COMMA; }
88\(                          { if(debug) fprintf(yyout, " LPAREN ");
89                                return LPAREN; }
90\)                          { if(debug) fprintf(yyout, " RPAREN ");
91                                return RPAREN; }
92\[                          { if(debug) fprintf(yyout, " LSQUARE ");
93                                return LSQUARE; }
94\]                          { if(debug) fprintf(yyout, " RSQUARE ");
95                                return RSQUARE; }
96\:                          { if(debug) fprintf(yyout, " COLON ");
97                                return COLON; }
98\?                          { if(debug) fprintf(yyout, " QMARK ");
99                                return QMARK; }
100\n                          { /* ignore end-of-line */; }
101[ \t]+                      { /* ignore whitespace */; }
102%%
103
Note: See TracBrowser for help on using the repository browser.