0

bison/flex にこの問題があります (他の投稿を見たことがありますが、YYSTYPE をどこにも定義していないため、ここでは問題になりません)。%union を使用して、lexer から .y に変数を渡したいと考えています。これは私が持っているものです

%{
#include "simple-expr.tab.h"
#include <math.h>
extern double vbltable[26];
extern int yyval;
%}

%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { yyval.integerID = atoi(yytext); return ID; }
\* { yyval.charTokens = yytext; return TIMES; }
\+ { yyval.charTokens = yytext; return PLUS; }
\( { yyval.charTokens = yytext; return LPAREN; }
\) { yyval.charTokens = yytext; return RPAREN; }
[ \t\n] ;
%%

そしてyacc:

%{
%}

%union {
      int integerID;
      char* charTokens;
}

%token <charTokens> PLUS TIMES LPAREN RPAREN 
%token <integerID> ID

%%
e :  e PLUS t { printf("FROM THE yypars.y %c", PLUS); }
    | t
      ;
t : t TIMES f
    | f
      ;
f : LPAREN e RPAREN
    | ID
    ;

%%

これらは私が得ているエラーです:

simple-expr.lex:9:8: エラー: 構造体でも共用体でもないメンバー 'integerID' の要求 simple-expr.lex:10:8: エラー: 構造体でも共用体でもないメンバー 'charTokens' の要求simple-expr.lex:11:8: エラー: 構造体でも共用体でもないメンバー 'charTokens' の要求 simple-expr.lex:12:8: エラー: 構造体でも共用体でもないメンバー 'charTokens' の要求simple-expr.lex:13:8: エラー: 構造体でも共用体でもないメンバー 'charTokens' の要求 make: * [simple-expr] エラー 1

前に言ったように、YYSTYPE をどこにも定義していないので、これは問題になりません。

4

1 に答える 1

1

レクサーからパーサーに情報を渡す変数の名前はyylvalnotyyvalです。で正しい型で自動的に宣言され*.tab.hます。だからこれはうまくいくはずです

%{
#include "simple-expr.tab.h"
#include <math.h>
extern double vbltable[26];
%}

%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { yylval.integerID = atoi(yytext); return ID; }
\* { yylval.charTokens = yytext; return TIMES; }
\+ { yylval.charTokens = yytext; return PLUS; }
\( { yylval.charTokens = yytext; return LPAREN; }
\) { yylval.charTokens = yytext; return RPAREN; }
[ \t\n] ;
%%
于 2012-10-13T06:27:29.563 に答える