LEX 程序打印最长的字符串并找到给定数字的平均值
莱克斯:
Lex 程序的目的是生成词法分析器。 Lex 分析器是将输入流转换为标记序列的程序。 AC 程序实现词法分析器来读取输入流并产生输出作为源代码。
要使用的命令 –
lex file_name.l // To produce a c program
cc lex.yy.c -lfl // To compile the c program and produces object program a.out.
./a.out // To transforms an input stream into a sequence of tokens.
1.最长的字符串:
在此,我们使用名为的函数来查找最长字符串的长度 (它返回给定字符串的长度)。我们将这个返回值存储在变量中 .要打印我们正在使用的最长的字符串或单词和函数。我们将字符串或单词存储在 char 类型的变量中,即 .
程序 -
C
%{
//to find longest string and its length
#include
#include
int longest = 0;
char longestString[30];
%}
%%
[a-zA-Z]+ {
if(yyleng>longest){
longest = yyleng;
strcpy(longestString,yytext);
}
}
%%
int main(void){
yylex();
printf("The longest string is %s \n", longestString);
printf("Length of a longest string is %d \n",longest);
}
C
%{
//Average of given numbers.
#include
#include
%}
digit[0-9]+
%%
{digit} return atoi(yytext);
%%
int main(){
float sum=0, num, n=0;
while((num=yylex())>0){
sum = sum+num;
n = n+1;
}
printf("The sum of given numbers is %f\n",sum);
printf("Average of given numbers is %f\n",sum/n);
yylex();
return 0;
}
输出 -
2.给定数字的平均值:
因此,首先我们必须计算用户给出的所有数字的总和。将 sum 存储在变量 sum 中。然后计算整数的数量(用户给出的数字)。将此计数存储在变量 n 中。
在此之后,只需将数字的总和和计数相除。你会得到你的结果。
在这里,我们使用内置函数atoi()。可以将字符串字符传递给 atoi()函数,该函数会将它们转换为整数。输入字符串是可以转换为数值的文本字符串。当输入字符串中的第一个字符不是数字的一部分时,atoi()函数会停止读取它。这可能是字符串末尾的空字符。它不支持指数和小数。
atoi()函数在开头删除字符串中的所有空白。
程序 -
C
%{
//Average of given numbers.
#include
#include
%}
digit[0-9]+
%%
{digit} return atoi(yytext);
%%
int main(){
float sum=0, num, n=0;
while((num=yylex())>0){
sum = sum+num;
n = n+1;
}
printf("The sum of given numbers is %f\n",sum);
printf("Average of given numbers is %f\n",sum/n);
yylex();
return 0;
}
输出 -