ですから、私はフレックス/バイソンに非常に慣れていませんが、単純な整数計算機を認識するためにこのパーサーを作成する必要があり、フレックスとバイソンが互いに通信するのに苦労していました。
Flexは、本来あるべきすべてのトークン値を返しますが、実際にセマンティック値を返すようにすることはできません。これは私のフレックスファイルです:
%option noyywrap
%{
#include "test_Calc_Answer.tab.h"
#include <malloc.h>
#include <process.h>
#define fileno _fileno
%}
NUM [0-9]
%%
"{"[\^{}}]*"}"
[ \t]+
[\n] {
return (int)'\n';
}
"+" {
return (int)'+';
}
"-" {
return (int)'-';
}
"*" {
return (int)'*';
}
"/" {
return (int)'/';
}
{NUM}+ {
int i, value = 0;
for(i = yyleng-1; i>=0; i--)
value = 10*value + ( yytext[i] - '0' );
yyval = value;
return DIGIT;
}
%%
生成されたコードをコンパイルしようとすると、「yyvalundeclared」エラーが発生します。* .tab.hファイルで宣言されているので、問題が何であるか理解できません。追加情報を提供する必要があるかどうか教えてください...
よろしくお願いします。ご迷惑をおかけして申し訳ありません。