📜  LEX 程序打印最长的字符串并找到给定数字的平均值

📅  最后修改于: 2022-05-13 01:54:10.557000             🧑  作者: Mango

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.最长的字符串:
在此,我们使用名为的函数来查找最长字符串的长度yyleng   (它返回给定字符串的长度)。我们将这个返回值存储在变量中longest   .要打印我们正在使用的最长的字符串或单词yytext   strcpy()   函数。我们将字符串或单词存储在 char 类型的变量中,即longestString   .

程序 -

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;
}

输出 -