Я пытаюсь прочитать несколько арифметических c выражений, таких как + (b + c) или * (b / v ^ z) из файла, используя lex. Здесь проблема в том, что я могу только прочитать первую строку из файла и проверить выражение. Остальные строки игнорируются. Я попытался использовать while l oop при обнаружении новой строки и сбросить флаги, но он показал ошибку, поэтому я вернулся обратно.
%{
#include<stdio.h>
int a=0,s=0,m=0,d=0,ob=0,cb=0;
int flaga=0, flags=0, flagm=0, flagd=0;
%}
id [a-zA-Z]+
%%
{id} {printf("\n %s is an identifier\n",yytext);}
[+] {a++;flaga=1;}
[-] {s++;flags=1;}
[*] {m++;flagm=1;}
[/] {d++;flagd=1;}
[(] {ob++;}
[)] {cb++;}
%%
int main(int argc, char* argv[])
{
yyin=fopen(argv[1],"r");
yylex();
if(ob-cb==0)
{
printf("Valid expression\n");
}
else
{
printf("Invalid expression");
}
printf("\nAdd=%d\nSub=%d\nMul=%d\nDiv=%d\n",a,s,m,d);
printf("Operators are: \n");
if(flaga)
printf("+\n");
if(flags)
printf("-\n");
if(flagm)
printf("*\n");
if(flagd)
printf("/\n");
return 0;
}
Читаемый файл выглядит следующим образом:
a*v/c
a*(b+z)/d
d*baa^^v
a+b**
v+c^d
f+(c/d)^(a+s)
d/a**ba