home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / common / parser.y < prev    next >
Text File  |  2002-04-20  |  4KB  |  185 lines

  1. /* Version: $Id: parser.y,v 1.26 2002/04/19 22:12:37 RL Exp $ */
  2.  %{
  3. #include "wx/setup.h"
  4. #include <string.h>
  5. #ifdef _MSC_VER
  6. #include <io.h>
  7. #endif
  8. #if defined(__GNUWIN32__) && !defined(__TWIN32__)
  9. #include <sys/unistd.h>
  10. #endif
  11.  
  12. #include "wx/expr.h"
  13.  
  14. #ifndef __EXTERN_C__
  15. #define __EXTERN_C__ 1
  16. #endif
  17.  
  18. #if defined(__cplusplus) || defined(__STDC__)
  19. #if defined(__cplusplus) && defined(__EXTERN_C__)
  20. extern "C" {
  21. #endif
  22. #endif
  23. int yylex(void);
  24. int yylook(void);
  25. int yywrap(void);
  26. int yyback(int *, int);
  27. void yyerror(char *);
  28.  
  29. /* You may need to put /DLEX_SCANNER in your makefile
  30.  * if you're using LEX!
  31.  */
  32. void yyoutput(int);
  33.  
  34. #if defined(__cplusplus) || defined(__STDC__)
  35. #if defined(__cplusplus) && defined(__EXTERN_C__)
  36. }
  37. #endif
  38. #endif
  39. %}
  40.  
  41. %union {
  42.     char *s;
  43. /*    struct pexpr *expr; */
  44. }
  45.  
  46.  
  47. %start commands
  48.  
  49. %token <s> INTEGER 1
  50. %token <s> WORD 2
  51. %token <s> STRING 3
  52. %token <s> PERIOD 13
  53. %token OPEN 4
  54. %token CLOSE 5
  55. %token COMMA 6
  56. %token NEWLINE 7
  57. %token ERROR 8
  58. %token OPEN_SQUARE 9
  59. %token CLOSE_SQUARE 10
  60. %token EQUALS 11
  61. %token EXP 14
  62.  
  63. /* %type <expr> command expr arglist arg arg1 */
  64. %type <s> command expr arglist arg arg1
  65.  
  66. %%
  67.  
  68. commands :    /* empty */
  69.     |    commands command
  70.     ;
  71.  
  72. command    :       WORD PERIOD
  73.             {process_command(proio_cons(wxmake_word($1), NULL)); free($1);}
  74.         |       expr PERIOD
  75.             {process_command($1);}
  76.     |    error PERIOD
  77.             {syntax_error("Unrecognized command.");}
  78.     ;
  79.  
  80. expr    :    WORD OPEN arglist CLOSE 
  81.             {$$ = proio_cons(wxmake_word($1), $3); free($1);}
  82.     |    OPEN_SQUARE arglist CLOSE_SQUARE
  83.             {$$ = $2; }
  84.     ;
  85.  
  86. arglist    :
  87.             {$$ = proio_cons(NULL, NULL);}
  88.     |    arg
  89.             {$$ = proio_cons($1, NULL);}
  90.     |
  91.         arg COMMA arglist
  92.             {$$ = proio_cons($1, $3);}
  93.     ;
  94.  
  95. arg    :    WORD EQUALS arg1
  96.             {$$ = proio_cons(wxmake_word("="), proio_cons(wxmake_word($1), proio_cons($3, NULL)));
  97.                          free($1); }
  98.     |    arg1
  99.             {$$ = $1; }
  100.     ;
  101.  
  102. arg1    :    WORD
  103.             {$$ = wxmake_word($1); free($1);}
  104.     |    STRING
  105.             {$$ = wxmake_string($1); free($1);}
  106.     |    INTEGER
  107.             {$$ = wxmake_integer($1); free($1);}
  108.     |    INTEGER PERIOD INTEGER
  109.             {$$ = wxmake_real($1, $3); free($1); free($3); }
  110.         |       INTEGER EXP INTEGER
  111.                          {$$ = wxmake_exp($1, $3); free($1); free($3); }
  112.         |
  113.               INTEGER PERIOD INTEGER EXP INTEGER
  114.                          {$$ = wxmake_exp2($1, $3, $5); free($1); free($3);
  115.                                                                   free($5); }
  116.  
  117.     |    expr
  118.             {$$ = $1;}
  119.     ;
  120.  
  121. %%
  122.  
  123. /* We include lexer.c if we are building for gtk, wine or motif
  124.  * and also whenever we are using configure (marked by __WX_SETUP_H__) for,
  125.  * for example, cross compilation. */
  126. #if (defined(__WXGTK__) || defined(__WXWINE__) || defined(__WXMOTIF__)) || defined(__WX_SETUP_H__) && !defined(NO_CONFIGURE)
  127. #include "lexer.c"
  128. #elif defined(__WXMAC__) && defined(__APPLE__)
  129. #include "lexer.c"
  130. #elif defined(__MWERKS__)
  131. #include "../common/cwlex_yy.c"
  132. #else
  133. #include "../common/lex_yy.c"
  134. #endif
  135.  
  136. /*
  137. void yyerror(s)
  138. char *s;
  139. {
  140.   syntax_error(s);
  141. }
  142. */
  143.  
  144. /* Ansi prototype. If this doesn't work for you... uncomment
  145.    the above instead.
  146.  */
  147.  
  148. void yyerror(char *s)
  149. {
  150.   syntax_error(s);
  151. }
  152.  
  153. /*
  154.  * Unfortunately, my DOS version of FLEX
  155.  * requires yywrap to be #def'ed, whereas
  156.  * the UNIX flex expects a proper function.
  157.  */
  158.  
  159. /* At least on alphaev6-dec-osf4.0e yywrap() must be #define'd.
  160.  * RL: ... but on Debian/Alpha(linux) it must not, so hopefully
  161.  *     testing for __OSF__ here is what we really want.
  162.  */
  163. #ifdef __OSF__
  164. #ifndef yywrap
  165. #define yywrap() 1
  166. #endif
  167. #else
  168. /* HH: Added test for __WX_SETUP_H__ for gnuwin builds
  169.  * using configure */ 
  170. #if !defined(__SC__) && !defined(__GNUWIN32__) 
  171. #ifdef USE_DEFINE
  172. #ifndef yywrap
  173. #define yywrap() 1
  174. #endif
  175. #elif !defined(__ultrix)
  176. int yywrap() { return 1; }
  177. #elif defined(__VMS__)
  178. int yywrap() { return 1; }
  179. #endif
  180. #elif defined(__WX_SETUP_H__)
  181. int yywrap() { return 1; }
  182. #endif
  183. #endif
  184.  
  185.