Ранее я уже просил помощи по Bison, и мне таки здорово помогли, за что большое спасибо всем, кто написал в тот тред. Теперь возникла новая проблема - мне надо сделать преобразование грамматики из прошлого примера в обратную польскую запись. Я нашёл пример RPN Calc на gnu.org, но от него пользы мало. Так и не понял, как же работать со строками в бизоне. Вот код:
%{
	#define YYSTYPE char *
	#include <stdio.h>
	#include <ctype.h>
	#include <cstring>
	#include «bison.tab.hh»
	int yyparse(void); 
	int yyerror (const char *s){}
	void yylex_reinitialize(void) {
		int c;
		while ( c != EOF && c != '\n' )
			c = getchar();
	}
	int yylex(void) {
		int c;
		while ( (c = getchar()) == ' ' || c == '\t' );
		if (c == EOF || c == '\n')
			return 0;
		return c; 
	}
	int main (void) {
		while (1) {
			if (!yyparse()) {
				printf(«Правильная строка\n»);
			}
			else {
				printf(«Ошибка: неправильная строка\n»);
				yylex_reinitialize();
			}
		}
	}
%}
%token 'c' 'e' 'd'
%%
S: E { printf(«%s», $$); };
E: E'+'T { $$ = strcat($1, $3); $$ = strcat($$, $2); };
E: T;
T: T'*'F { $$ = strcat($1, $3); $$ = strcat($$, $2); };
T: F;
F: 'c'|'e'|'d'|'('E')';
%%
Собственно, он компилируется, но выдаёт Segmentation fault. Подозреваю, что я где-то должен выделить память для $$ сначала.