flex-bison-in-action/analyzers/test/test.y

49 lines
748 B
Plaintext

%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int yylineno;
extern char *yytext;
void yyerror(const char *s) {
fprintf(stderr, "\033[91mError at line %i\033[0m", yylineno);
exit(1);
}
extern int yylex();
extern FILE *yyin;
%}
%union {
char *str;
}
%token <str> TEXT
%token LBRACE RBRACE
%%
block:
LBRACE content RBRACE
;
content:
| content TEXT { printf("TOKEN ('%s')\n", $2); free($2); }
| content block {}
;
%%
int main(int argc, char **argv) {
yylineno = 1;
if (argc > 1) {
FILE *f = fopen(argv[1], "r");
if (!f) {
perror("\033[91mFail open file\033[0m");
return 1;
}
yyin = f;
}
yyparse();
return 0;
}