2016-05-23 8 views
-1

は私が持っている場合:

if { 
    yylval = $1; 
} 

は、この法律上のですか?そうでない場合は、私が入れたものを参照したいと言う別の方法がありますか?

yylval = 'if'を言っていけないしてください、それはダイナミックではない、と私はいくつかのより複雑なシナリオでそれを使用したい)

+1

あなたが 'yylval = yytext;'を意味するわけではないなら、あなたは何をしたいのか分かりません。もしあなたがそれを意味していれば、あなたはコピーを作る必要があるのでそれは合法ではないので、 'yylval = strdup(yytext);'を使うべきです。 – rici

答えて

1

$1や友人は、文法中の非ターミナルまたはターミナルシンボルです。私はあなたが正確にやろうとしているのか分からないが、通常あなたはこのような一連のルールだろう:

"if"  { return IF; } 
"else" { return ELSE; } 
[0-9]+ { yylval.intValue = atoi(yytext); return INTEGER; } 

など、IFとELSEは次のようにy.tab.hで定義されていますあなたの.yファイルに%tokenディレクティブで宣言された結果

yylval = 'if'を言わないでください、それは

ダイナミックではないんどちらもlexルールです。あなたの目的は不明瞭なままです。