Flex でユーザー入力を小文字に変換するにはどうすればよいですか? オンラインで調べましたが、役立つものは何も見つかりませんでした。
私がこれをやろうとすると:
yylval.string = strdup(tolower( yytext) );
「tolower」の arg 1 を渡すと、キャストなしでポインターから整数が作成されます。
ありがとう、サラ
Flex でユーザー入力を小文字に変換するにはどうすればよいですか? オンラインで調べましたが、役立つものは何も見つかりませんでした。
私がこれをやろうとすると:
yylval.string = strdup(tolower( yytext) );
「tolower」の arg 1 を渡すと、キャストなしでポインターから整数が作成されます。
ありがとう、サラ
%{
#include <stdio.h>
#include <ctype.h>
%}
%%
[A-Z] putchar(tolower(*yytext));
文字列全体を小文字に変換したい場合は、単一の文字のみtolower
を変換するため、ループで呼び出す必要があります。tolower
for (i = 0; yytext[i]; i++)
yytext[i] = tolower(yytext[i]);
yylval.string = strdup(yytext);
上部の「C」セクションでYY_INPUTマクロを再定義できます。
#define YY_INPUT(buf,result,max_size) \
{ \
int c = '*', n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) tolower(c); \
if ( c == '\n' ) \
buf[n++] = (char) tolower(c); \
if ( c == EOF && ferror( yyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
}