我正在写一个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 ();
}
输出:
答案 0 :(得分:0)
(答案包含在评论中,我在此处提及。请参阅Question with no answers, but issue solved in the comments (or extended in chat))。
@Thomas Padron-McCarthy和@David Gorsline是正确的:Flex可能不了解输入文件的字符编码。据我所知,Flex仍然只能理解单字节字符。
放大Thomas的评论:尝试更简单的程序版本,将carac
定义为carac (:|;|.|,|/|?|=|-|!|^|%)
。
您可能需要引用特殊字符:carac (\:|\;|\.|\,|\/|\?|\=|\-|\!|\^|\%)
或使用字符类表示法:carac [-:;.,/?=!^%]
为了确认这一点,我应用了这些编辑并通过flex运行它。以下不会给出弹性错误:
carac (\•|\¤|\¶|\§|\à|\î|\ì|\Ä|\Å|\É|\æ|\Æ|\ô|\ö|\ò|\û|\ù|\ÿ|\Ö|\Ü|\ø|\£|\Ø|\×|\ƒ|\á|\í|\ó|\ú|\ñ|\Ñ|\ª|\º|\¿|\®|\¬|\½|\¼|\¡|\:|\;|\.|\,|\/|\?|\=|\-|\!|\*|\£|\µ|\^|\¨|\%)