gpt4 book ai didi

c - 如何在 lex 中为 c 类型整数编写正则表达式?

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:34 24 4
gpt4 key购买 nike

我正在尝试用 lex 编写 C 解析器代码

   %{
/* this program does the job for identifying C type integer and floats*/
%}
%%

[\t ]+ /* ignore whitespace */ ;

[0-9][5]+ { printf ("\"%s\" out of range \n", yytext); }
[-+][0-9][5] { printf ("\"%s\" is a C integers\n", yytext); }
[-+]?[0-9]*\.?[0-9]+ { printf ("\"%s\" is a float\n", yytext); }

\n ECHO; /* which is the default anyway */
%%

我在识别 C 类型整数时遇到了一个问题,因为它有一个限制,即 32767。所以我使用了正则表达式,即数字长度大于 5 应该大喊“超出范围”错误,但这是一个 hack 而不是完美的解决方案。

最佳答案

事实证明,这可能是不可能做对的。正则表达式构成了一种相当简单的识别(没有内存的状态机),并且实际上只适用于标记化/词法分析。您正在尝试将其用于类型检查,这需要更多的能力。

我会把它留给解析器本身。填写符号表(知道要分配给哪种变量)会容易得多,并且可以检查整数的实际值并将其与上限和下限进行比较。

关于c - 如何在 lex 中为 c 类型整数编写正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22556476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com