マイlexのファイルがあります。エクストラ右ブレース
word [^{}"=,\t\[email protected]\\ ]+
\{ {
return(LBRACE);
}
\} {
return(RBRACE);
}
{word} {
yylval = yytext; printf("WORD=%s",yytext); return(WORD);
}
私のyaccファイルがあります。
phrase: LBRACE WORD RBRACE {printf("LBRACE %s RBRACE\n",$2);};
入力するには:
{FooBar}
私が手:
WORD=FooBar
LBRACE FooBar} RBRACE
私はWORD
生産にそれは(yylval
経由)yytext
の値を格納するのはあなた次第ですされなければならない理想的な
答えをありがとう!私はあなたがグローバル変数yylengを意味すると思いますよね?また、 'strncpy'は' yyleng + 1'文字を越えて終端ヌルを得るべきではありませんか? 'strndup'が使用されている場合は、それ自身で終了するnullを追加します。 –
@crypto:はい、私はlexによって提供されたグローバルなyylenを意味します。私がcalloc()を使用するので、strncpyはyylen + 1をコピーする必要はありません。したがって、strncpyが余分な '\ 0'を追加するかどうかは関係なく、 '\ 0'となります。 –