0
Я пытаюсь написать программу для вычисления булевского выражения NAND с использованием Lex/Yacc.Lex/Yacc для логического вычисления
Например, если вход «истинно NAND (ложь правда NAND),» моя программа должна печатать «ложь»
Это то, что я до сих пор ,, но я действительно застрял
Что я пропадаю или делаю неправильно?
boolean.l
%{
#include "y.tab.h"
%}
%%
"true"|"false" {return BOOL;}
"nand" {return NAND;}
[()] {return yytext[0];}
%%
boolean.y
%token BOOL NAND
%left NAND
%%
boolexp: boolexp NAND boolterm {$$ = !($1 && $3);}
| boolterm {$$=$1;}
;
boolterm: '(' boolexp ')'
| BOOL {$$ = (strcmp($1, "true")) ? 1 : 0;}
;
%%
#include <lex.yy.c>
int main(void) {
yyparse();
}
'strcmp' возвращает 0, если сравниваемые значения равны. Ваше тернарное заявление обратное. – Josh