【发布时间】:2026-01-18 04:55:02
【问题描述】:
我正在编写一个 lex 程序。这个问题的目的是我输入一个字符串(字母和其他字符)并返回这个字符串的长度。
代码如下:
letter ([a-z]|[A-Z])
carac (•|¤|¶|§|à|î|ì|Ä|Å|É|æ|Æ|ô|ö|ò|û|ù|ÿ|Ö|Ü|ø|£|Ø|×|ƒ|á|í|ó|ú|ñ|Ñ|ª|º|¿|®|¬|½|¼|¡|:|;|.|,|/|?|=|-|!|*|£|µ|^|¨|%)
String {letter}({letter}|{carac})*
%%
{String} printf("[%d] : The number of your String \n",yyleng);
.* printf("You have a problem somewhere !");
%%
int yywrap(){return 1;}
main ()
{
yylex ();
}
还有输出:
【问题讨论】:
-
Flex 可能不理解您输入文件的字符编码。据我所知,Flex 仍然只能理解单字节字符。
-
扩大 Thomas 的评论:尝试一个更简单的程序版本,将 carac 定义为
carac (:|;|.|,|/|?|=|-|!|^|%)。 -
@DavidGorsline 仍然无法解决某些问题
-
您可能需要引用特殊字符:carac (\:|\;|\.|\,|\/|\?|\=|\-|\!|\^|\% ) 或者使用字符类表示法:carac [-:;.,/?=!^%]
标签: lex flex-lexer