/[eliot]/eliot/dic/er.y
ViewVC logotype

Diff of /eliot/dic/er.y

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by ipkiss, Sun Oct 23 14:53:43 2005 UTC revision 1.10 by ipkiss, Sat Nov 5 17:56:22 2005 UTC
# Line 19  Line 19 
19  /* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */  /* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
20    
21  #include <stdio.h>  #include <stdio.h>
22  #include <malloc.h>    #include <malloc.h>
23  #include <stdlib.h>  #include <stdlib.h>
24  #include <string.h>  #include <string.h>
25    
26  #include "dic.h"  #include "dic.h"
27  #include "dic_internals.h"  #include "dic_internals.h"
28    
29  #include "dic.h"  #include "dic.h"
30  #include "regexp.h"  #include "regexp.h"
# Line 33  Line 33 
33  #include "scanner.h"  #include "scanner.h"
34    
35    
36      /**      /**
37       * function prototype for parser generated by bison       * function prototype for parser generated by bison
38       */       */
39  int  regexpparse(yyscan_t scanner, NODE** root,  int  regexpparse(yyscan_t scanner, NODE** root,
40                   struct search_RegE_list_t *list,                   struct search_RegE_list_t *list,
41                   struct regexp_error_report_t *err);                   struct regexp_error_report_t *err);
42      /**      /**
43       * function prototype for error reporting       * function prototype for error reporting
44       */       */
45  void regexperror(YYLTYPE *llocp, yyscan_t scanner, NODE** root,  void regexperror(YYLTYPE *llocp, yyscan_t scanner, NODE** root,
46                   struct search_RegE_list_t *list,                   struct search_RegE_list_t *list,
47                   struct regexp_error_report_t *err,                   struct regexp_error_report_t *err,
48                   char const *msg);                   char const *msg);
49    
50    
51  %}    %}
52  %union {  %union {
53    char c;    char c;
54    NODE *NODE_TYPE;    NODE *NODE_TYPE;
55    char letters[DIC_LETTERS];    char letters[DIC_LETTERS];
56  };  };
57    
58  %defines  %defines
# Line 72  void regexperror(YYLTYPE *llocp, yyscan_ Line 72  void regexperror(YYLTYPE *llocp, yyscan_
72  %token  LEX_USER1  %token  LEX_USER1
73  %token  LEX_USER2  %token  LEX_USER2
74    
75  %token  LEX_L_SQBRACKET LEX_R_SQBRACKET  %token  LEX_L_SQBRACKET LEX_R_SQBRACKET
76  %token  LEX_L_BRACKET LEX_R_BRACKET  %token  LEX_L_BRACKET LEX_R_BRACKET
77  %token  LEX_HAT  %token  LEX_HAT
78    
79  %token  LEX_QMARK  %token  LEX_QMARK
80  %token  LEX_PLUS  %token  LEX_PLUS
# Line 86  void regexperror(YYLTYPE *llocp, yyscan_ Line 86  void regexperror(YYLTYPE *llocp, yyscan_
86  %type   <letters>   vardis  %type   <letters>   vardis
87  %type   <letters>   exprdis  %type   <letters>   exprdis
88  %type   <NODE_TYPE> exprdisnode  %type   <NODE_TYPE> exprdisnode
89  %start  start          %start  start
90  %%  %%
91    
92  start: LEX_L_BRACKET expr LEX_R_BRACKET LEX_SHARP  start: LEX_L_BRACKET expr LEX_R_BRACKET LEX_SHARP
93         {         {
94           NODE* sharp = regexp_createNODE(NODE_VAR,RE_FINAL_TOK,NULL,NULL);           NODE* sharp = regexp_createNODE(NODE_VAR,RE_FINAL_TOK,NULL,NULL);
95           *root = regexp_createNODE(NODE_AND,'\0',$2,sharp);           *root = regexp_createNODE(NODE_AND,'\0',$2,sharp);
96           YYACCEPT;           YYACCEPT;
97         }         }
98       ;       ;
99    
100    
101  expr : var                        expr : var
102         {         {
103           $$=$1;           $$=$1;
104         }           }
105       | expr expr                       | expr expr
106         {         {
107           $$=regexp_createNODE(NODE_AND,'\0',$1,$2);           $$=regexp_createNODE(NODE_AND,'\0',$1,$2);
108         }         }
109       | var LEX_QMARK                       | var LEX_QMARK
110         {         {
111           NODE* epsilon=regexp_createNODE(NODE_VAR,RE_EPSILON,NULL,NULL);           NODE* epsilon=regexp_createNODE(NODE_VAR,RE_EPSILON,NULL,NULL);
112           $$=regexp_createNODE(NODE_OR,'\0',$1,epsilon);           $$=regexp_createNODE(NODE_OR,'\0',$1,epsilon);
# Line 115  expr : var Line 115  expr : var
115         {         {
116           $$=regexp_createNODE(NODE_PLUS,'\0',$1,NULL);           $$=regexp_createNODE(NODE_PLUS,'\0',$1,NULL);
117         }         }
118       | var LEX_STAR                       | var LEX_STAR
119         {         {
120           $$=regexp_createNODE(NODE_STAR,'\0',$1,NULL);           $$=regexp_createNODE(NODE_STAR,'\0',$1,NULL);
121         }         }
122  /* () */  /* () */
123       | LEX_L_BRACKET expr LEX_R_BRACKET       | LEX_L_BRACKET expr LEX_R_BRACKET
124         {         {
125           $$=$2;           $$=$2;
126         }         }
127       | LEX_L_BRACKET expr LEX_R_BRACKET LEX_QMARK           | LEX_L_BRACKET expr LEX_R_BRACKET LEX_QMARK
128         {         {
129           NODE* epsilon=regexp_createNODE(NODE_VAR,RE_EPSILON,NULL,NULL);           NODE* epsilon=regexp_createNODE(NODE_VAR,RE_EPSILON,NULL,NULL);
130           $$=regexp_createNODE(NODE_OR,'\0',$2,epsilon);           $$=regexp_createNODE(NODE_OR,'\0',$2,epsilon);
131         }         }
132       | LEX_L_BRACKET expr LEX_R_BRACKET LEX_PLUS           | LEX_L_BRACKET expr LEX_R_BRACKET LEX_PLUS
133         {         {
134           $$=regexp_createNODE(NODE_PLUS,'\0',$2,NULL);           $$=regexp_createNODE(NODE_PLUS,'\0',$2,NULL);
135         }         }
136       | LEX_L_BRACKET expr LEX_R_BRACKET LEX_STAR           | LEX_L_BRACKET expr LEX_R_BRACKET LEX_STAR
137         {         {
138           $$=regexp_createNODE(NODE_STAR,'\0',$2,NULL);           $$=regexp_createNODE(NODE_STAR,'\0',$2,NULL);
139         }         }
# Line 155  expr : var Line 155  expr : var
155         {         {
156           $$=regexp_createNODE(NODE_STAR,'\0',$2,NULL);           $$=regexp_createNODE(NODE_STAR,'\0',$2,NULL);
157         }         }
158       ;           ;
159    
160    
161    
# Line 165  var : LEX_CHAR Line 165  var : LEX_CHAR
165           printf("var : lecture %c\n",$1 + 'a' -1);           printf("var : lecture %c\n",$1 + 'a' -1);
166  #endif  #endif
167           $$=regexp_createNODE(NODE_VAR,$1,NULL,NULL);           $$=regexp_createNODE(NODE_VAR,$1,NULL,NULL);
168         }           }
169       | LEX_ALL       | LEX_ALL
170         {         {
171           $$=regexp_createNODE(NODE_VAR,RE_ALL_MATCH,NULL,NULL);           $$=regexp_createNODE(NODE_VAR,RE_ALL_MATCH,NULL,NULL);
# Line 215  exprdisnode : exprdis Line 215  exprdisnode : exprdis
215                 }                 }
216             }             }
217           $$=regexp_createNODE(NODE_VAR,list->symbl[i],NULL,NULL);           $$=regexp_createNODE(NODE_VAR,list->symbl[i],NULL,NULL);
218         }         }
219       | LEX_HAT exprdis       | LEX_HAT exprdis
220         {         {
221           int i,j;           int i,j;
# Line 249  exprdisnode : exprdis Line 249  exprdisnode : exprdis
249  exprdis: vardis  exprdis: vardis
250         {         {
251           memcpy($$,$1,sizeof(char)*DIC_LETTERS);           memcpy($$,$1,sizeof(char)*DIC_LETTERS);
252         }           }
253       | vardis exprdis       | vardis exprdis
254         {         {
255           int i;           int i;
# Line 269  vardis: LEX_CHAR Line 269  vardis: LEX_CHAR
269  #endif  #endif
270           $$[c] = 1;           $$[c] = 1;
271         }         }
272       ;       ;
273    
274    
275  %%  %%
276    
277  void regexperror(YYLTYPE *llocp, yyscan_t yyscanner, NODE** root,  void regexperror(YYLTYPE *llocp, yyscan_t yyscanner, NODE** root,
278                   struct search_RegE_list_t *list,                   struct search_RegE_list_t *list,
279                   struct regexp_error_report_t *err, char const *msg)                   struct regexp_error_report_t *err, char const *msg)
280  {  {
281    err->pos1 = llocp->first_column;    err->pos1 = llocp->first_column;

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26