help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Where to put '#define YYSTYPE char *'?


From: Chris verBurg
Subject: Re: Where to put '#define YYSTYPE char *'?
Date: Mon, 28 Dec 2009 00:39:00 -0500

I think that belongs in the flex file (example6.l), not the yacc file
(example6.y).

-Chris


On Sun, Dec 27, 2009 at 9:55 PM, Peng Yu <address@hidden> wrote:

> I have the following example6.y and example6.l files. The compilation
> gives me warnings. I'm not sure where to put '#define YYSTYPE char *'
> (it is currently in example6.y). Could somebody let me know? The
> example is from http://tldp.org/HOWTO/Lex-YACC-HOWTO-4.html
>
> $./compile.sh
> here
> example6.l: In function ‘yylex’:
> example6.l:10: warning: assignment makes integer from pointer without a
> cast
> example6.l:11: warning: assignment makes integer from pointer without a
> cast
> $cat ./compile.sh
> flex example6.l
> bison -d example6.y
> echo 'here'
> gcc lex.yy.c example6.tab.c -o example6
>
>
>
> $cat example6.y
> %{
> #include <stdio.h>
> #include <string.h>
>
> #define YYSTYPE char *
>
> void yyerror(const char *str)
> {
>        fprintf(stderr,"error: %s\n",str);
> }
>
> int yywrap()
> {
>        return 1;
> }
>
> main()
> {
>        yyparse();
> }
>
> %}
>
> %token FILETOK SEMICOLON OBRACE EBRACE ZONETOK QUOTE WORD FILENAME
>
> %%
> commands:
>        |
>        commands command SEMICOLON
>        ;
>
> command:
>        zone_set
>        ;
>
> zone_set:
>        ZONETOK quotedname zonecontent
>        {
>                printf("Complete zone for '%s' found\n",$2);
>        }
>        ;
>
> zonecontent:
>        OBRACE zonestatements EBRACE
>
> zonestatements:
>        |
>        zonestatements zonestatement SEMICOLON
>        ;
>
> zonestatement:
>        statements
>        |
>        FILETOK quotedname
>        {
>                printf("A zonefile name '%s' was encountered\n", $2);
>        }
>        ;
>
>
> quotedname:
>        QUOTE FILENAME QUOTE
>        {
>                $$=$2;
>        }
>
>    block:
>            OBRACE zonestatements EBRACE SEMICOLON
>            ;
>
>    statements:
>            | statements statement
>            ;
>
>    statement: WORD | block | quotedname
>            ;
> $cat example6.l
> %{
> #include <stdio.h>
> #include "example6.tab.h"
> %}
>
> %%
>
> zone                    return ZONETOK;
> file                    return FILETOK;
> [a-zA-Z][a-zA-Z0-9]*    yylval=strdup(yytext); return WORD;
> [a-zA-Z0-9\/.-]+        yylval=strdup(yytext); return FILENAME;
> \"                      return QUOTE;
> \{                      return OBRACE;
> \}                      return EBRACE;
> ;                       return SEMICOLON;
> \n                      /* ignore EOL */;
> [ \t]+                  /* ignore whitespace */;
> %%
> address@hidden:~/morgan/test/flex/example6$
>
>
> _______________________________________________
> address@hidden http://lists.gnu.org/mailman/listinfo/help-bison
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]