0

我正在编写一个 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 ();
}

和输出:

在此处输入图像描述

4

1 回答 1

0

(答案包含在评论中,我在这里包括。请参阅没有答案的问题,但问题在评论中解决(或在聊天中扩展))。

@Thomas Padron-McCarthy 和 @David Gorsline 是正确的:

  • Flex 很可能不理解输入文件的字符编码。据我所知,Flex 仍然只能理解单字节字符。

  • 放大 Thomas 的评论:尝试一个更简单的程序版本,您在其中定义caraccarac (:|;|.|,|/|?|=|-|!|^|%).

  • 您可能需要引用特殊字符:carac (\:|\;|\.|\,|\/|\?|\=|\-|\!|\^|\%)或使用字符类表示法:carac [-:;.,/?=!^%]

为了确认这一点,我应用了这些编辑并通过 flex 运行它。以下不会给出 flex 错误:

carac (\•|\¤|\¶|\§|\à|\î|\ì|\Ä|\Å|\É|\æ|\Æ|\ô|\ö|\ò|\û|\ù|\ÿ|\Ö|\Ü|\ø|\£|\Ø|\×|\ƒ|\á|\í|\ó|\ú|\ñ|\Ñ|\ª|\º|\¿|\®|\¬|\½|\¼|\¡|\:|\;|\.|\,|\/|\?|\=|\-|\!|\*|\£|\µ|\^|\¨|\%)
于 2015-01-23T19:25:24.573 回答