Комментарии не являются хорошим местом для предоставления примеров кода, поэтому я приведу пример кода, который работает после того, как Джонатан (ответил выше) поработал над моим кодом.Ему приписывают все должное, это не мое.
Вместо того, чтобы FLEX печатал какие-либо распознанные части и позволял BISON впоследствии выполнять форматирование, Джонатан предложил, чтобы FLEX ничего не печатал и возвращался только в BISON, что должно затемсправиться со всей печатью самостоятельно.
Итак, вместо чего-то подобного ...
FLEX
"FOR" {printf("for ("); return FOR;}
"TO" {printf("; "); return TO;}
"STEP" {printf("; "); return STEP;}
"ENDFOR" {printf("\n"); printf("}\n"); return ENDFOR;}
[a-zA-Z]+ {printf("%s",yytext); yylval.strV = yytext; return CHARACTERS;}
":=" {printf("="); lisnew=0; return COLONEQUALS;}
ЗУБР
loop_for: FOR var_name {strcpy(myvar, $<strV>2);} COLONEQUALS expression TO {printf("%s<=", myvar);} expression STEP {printf("%s+=", myvar);} expression {printf(")\n");} Code ENDFOR
... он предложил это:
FLEX
[a-zA-Z][a-zA-Z0-9]* { yylval = strdup(yytext); return VARNAME;}
[1-9][0-9]*|0 { yylval = strdup(yytext); return NUMBER; }
ЗУБР
loop_for: FOR var_name COLONEQUALS NUMBER TO NUMBER STEP NUMBER
{ printf("for (%s = %s; %s <= %s; %s += %s)\n", $2, $4, $2, $6, $2, $8); }
var_name: VARNAME