Ich habe ein Problem in logischen Operatoren mitflex yacc (Bison) Segmentierungsfehler, während der Baum Parsing Gebäude
In meiner .y Datei ich habe:
expr: expr oper1 expr { $$=insert_expression($2, $1, $3); }
| expr oper2 expr { $$=insert_expression($2, $1, $3); }
;
In meiner .l Datei bestimmt i dass oper1 und oper2 sind:
"<" | ">" | "=" | "<>" | "<=" | ">=" { return oper1; }
"AND" | "OR" { return oper2; }
Dann i eine Struktur haben, die Werte setzen in:
typedef struct _Expression
{
char *oper;
struct _Expression *ex1;
struct _Expression *ex2;
} is_expression;
und setzen die Werte in:
is_expression* insert_expression(char* oper, is_expression *expr1, is_expression *expr2)
{
is_expression* e = (is_expression*)malloc(sizeof(is_expression));
e->ex1 = expr1;
e->ex2 = expr2;
e->oper = oper;
return e;
}
und schließlich zeigen sie:
void show_expression(is_expression *e)
{
show_expression(e->ex1);
printf("%s", e->oper);
show_expression(e->ex2);
}
aber dann bekomme ich einen Segmentation Fault jedes Mal wenn ich eine ausdr oper ausdr verwenden:
Program received signal SIGSEGV, Segmentation Fault
Irgendwelche Ideen darüber, was ich falsch mache?
Dank
Sie vermissen eine geschweifte Klammer in Ihrem ersten Ausschnitt. –
um klar zu sein, '| expr oper2 expr $$ = Einfügeausdruck ($ 2, $ 1, $ 3); } 'sollte' | sein expr oper2 expr {$$ = Einfügeausdruck ($ 2, $ 1, $ 3); } ' – gbulmer
Sorry, kopieren & einfügen Fehler :-(Der ursprüngliche Code hat keine geschweiften Klammern fehlen (zumindest in y-Datei :-)) – Nitrate