49 lines
748 B
Plaintext
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;
|
|
} |