я побежал следующую команду в командной строке Windows:y.tab.c и y.tab.h файлы не создаются на Win64
yacc -d calci.y
После успешного выполнения он создает 2 файла: calci.tab.c
и calci.tab.h
. Но он должен был сгенерировать y.tab.c
и y.tab.h
.
Я очень новичок в lex
и yacc
, поэтому у меня нет идеи об ошибке.
Кроме того, он дает мне следующую ошибку, когда я пытаюсь запустить команду:
cc lex.yy.c calci.tab.c -o out.exe:
error: calci.l:3:23: fatal error: y.tab.h: No such file or directory compilation terminated.
Пожалуйста, дать некоторые предложения.
программы Yacc: --- >>
%{
#include <stdio.h>
int yylex(void);
void yyerror(char *);
%}
%token INTEGER
%%
program:
program expr '\n' { printf("%d\n", $2); }
|
;
expr:
INTEGER
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
;
%%
void yyerror(char *s) {
fprintf(stderr, "%s\n", s);
}
int main(void) {
yyparse();
return 0;
}
Лекса программа: - >>>>
%{
#include "y.tab.h"
#include <stdlib.h>
void yyerror(char *);
%}
%%
[0-9]+ {
yylval = atoi(yytext);
return INTEGER;
}
[-+\n] { return *yytext; }
[ \t] ; /* skip whitespace */
. yyerror("Unknown character");
%%
int yywrap(void) {
return 1;
}
Или используйте опцию '-y'. –