Как проверить несколько арифметических c выражений из файла в программе lex - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь прочитать несколько арифметических 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
...