, поэтому я хочу избежать глобальных переменных, но я хочу использовать Flex для токенизации ввода. я хочу знать, возможно ли передать значение yylex, чтобы я мог избавиться от глобальных s.
сейчас у меня есть это
%{
#include
#include
#include
#include
#include "lex.h"
%}
%option noyywrap
digit [0-9]
alpha [a-zA-Z]
alphanum {alpha}|{digit}|"_"
%%
[\t\n ] printf("WS:\n");
{alpha}{alphanum}* printf("symbol: %s\n",yytext);
{digit}+ printf("int: %s\n",yytext);
{digit}+"."{digit} printf("float: %s\n",yytext);
"\"".*"\"" printf("litral: %s\n",yytext);
"+" printf("op: %s\n",yytext);
"-" printf("op: %s\n",yytext);
"*" printf("op: %s\n",yytext);
"/" printf("op: %s\n",yytext);
"%" printf("op: %s\n",yytext);
"=" printf("op: %s\n",yytext);
"" printf("op: %s\n",yytext);
"==" printf("op: %s\n",yytext);
"!=" printf("op: %s\n",yytext);
"(" printf("op: %s\n",yytext);
")" printf("op: %s\n",yytext);
"," printf("op: %s\n",yytext);
"=" printf("op: %s\n",yytext);
%%
void LexInit() {
Tokens = malloc(sizeof(TokenStream));
Tokens->size=0;
}
void LexPush(const char* str) {
size_t size = strlen(str);
char* newstr = malloc(size*sizeof(char));
realloc(Tokens->tokens,++Tokens->size*sizeof(char*));
}
void Lex(const char* filepath) {
LexInit();
yyin = fopen(filepath,"r");
yylex();
}