📅  最后修改于: 2023-12-03 15:02:40.663000             🧑  作者: Mango
这个 LEX 程序可用于查找输入文本中最长的字符串,并计算输入文本中所有数字的平均值。 下面是程序的实现细节。
以下是程序的详细实现:
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int numCount = 0;
static int numSum = 0;
static char longestStr[1024] = "";
%}
%%
[a-zA-Z]+ {
if (strlen(yytext) > strlen(longestStr))
strcpy(longestStr, yytext);
}
[0-9]+ {
int num = atoi(yytext);
numCount++;
numSum += num;
}
. ; /* Ignore all other characters */
%%
int main() {
yylex(); /* This will invoke the rules above for each token. */
printf("Longest string: %s\n", longestStr);
if (numCount > 0) {
printf("Mean of numbers: %f\n", (float)numSum / numCount);
} else {
printf("No numbers found.\n");
}
return 0;
}
longestStr
用于存储最长的字符串。%{
和 %}
标记用于将代码插入到 lex
文件中生成的 C 代码中。%%
用于分隔定义语句和规则。rules
定义如何处理输入文本中的不同词法单元。.
忽略所有其他字符。main()
函数用于生成 lex
源文件所需要的代码。 这里使用 yylex()
函数来进行文本的识别并执行定义的规则。接下来我们使用一些示例来演示程序的运作方法。
This is a string with numbers such as 1234 and 567890.
Longest string: numbers
Mean of numbers: 289112.000000
如你所见,这个程序可以轻松地查找输入文本中最长的字符串,并计算输入文本中所有数字的平均值。如果你想了解更多关于 LEX 和 YACC 的信息,可以参考官方文档或优秀的书籍,如《LEX 和 YACC 教程》。