如何在Flex中將用戶輸入轉換爲小寫?看着一行,但沒有發現任何有用的東西。FLEX/BISON - 如何將用戶輸入轉換爲小寫?
當我嘗試這樣做:
yylval.string = strdup(tolower(yytext));
我得到錯誤提示:合格「tolower的」 ARG 1將指針整數,未作演員。
感謝, 薩拉
如何在Flex中將用戶輸入轉換爲小寫?看着一行,但沒有發現任何有用的東西。FLEX/BISON - 如何將用戶輸入轉換爲小寫?
當我嘗試這樣做:
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; \
}
不是一個好主意,在下一個flex版本(或者你在大客戶端安裝時被迫使用的史前版本)中,所述宏的細節可能會有所不同。 – vonbrand 2013-02-02 17:17:12
謝謝。我正在使用聯盟。我將如何改變這種情況:yylval.str = strdup(yytext); – sap 2012-04-26 17:15:38
您的解決方案很好,但是在令牌匹配後調用。但我希望用戶輸入任何一個單詞,它應該與規則相匹配。這個頁面http://www.esiee.fr/~najmanl/compil/Flex/flex_2.html正在討論一個宏,但不知道如何使用它。 – sap 2012-04-27 17:21:05
謝謝......但沒有upvote或接受! – Kaz 2012-04-28 18:58:47