gpt4 book ai didi

c - 识别有效算术表达式以及识别有效标识符和运算符的 Lex 程序

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:05 27 4
gpt4 key购买 nike

下面的程序检查像 a+b a-b 这样的算术表达式,它给出输出有效或无效;

%{
#include<stdio.h>
#include<stdlib.h>
int c,d,bo=0,bc=0;
%}
operand [a-zA-Z0-9]+
operator [+\-\/*]
%%
//the operand is one count higher than the operator if that fails then its is invalid eg a+b operand is two and operator is 1;

{operator} {d++;printf("%s is an operator \n",yytext);}

{operand} {c=d+1;printf("%s is an operand \n",yytext);}

"(" {if(bc<=bo)bo++;}

")" {bc++;}

\n {if(bo==bc&&c>d){printf("valid exp");}else {printf("invalid exp");};exit(0);}
%%
void main(){
yylex();
}

我面临的问题是当我检查 a++b 时它说有效但是当我尝试 a+b- 和其他值如 )a+b(, (a+b(,+a-b++ 它给出我正确的输出。仅对于 a++b 和 a--b 或 a+-b 它失败了。我有点卡住了。

这是\n 的 if 条件,当我按下 enter 时,我把它放在\n bcz 上,它给我输出并退出。

if(bo==bc && c>d)                   //c>d means if operand is greater than operator
{ printf("valid exp"); }
else {
printf("invalid exp"); }

最佳答案

我刚刚将 c=d+1 更改为 c++;产生错误的是一个逻辑错误,而不是检查操作数是否大于我向操作数添加 1 个额外的操作数,并且它总是在 a++b 中评估为 true

%{
#include<stdio.h>
#include<stdlib.h>
int c,d,bo=0,bc=0;
%}
operand [a-zA-Z0-9]+
operator [+\-\/*]
%%
//the operand is one count higher than the operator if that fails then its is invalid eg a+b operand is two and operator is 1;

{operator} {d++;printf("%s is an operator \n",yytext);}

{operand} {c++;printf("%s is an operand \n",yytext);}

"(" {if(bc<=bo)bo++;}

")" {bc++;}

\n {if(bo==bc&&c>d){printf("valid exp");}else {printf("invalid exp");};exit(0);}
%%
void main(){
yylex();
}

关于c - 识别有效算术表达式以及识别有效标识符和运算符的 Lex 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47248897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com