Iam versucht, ein Programm für einen Taschenrechner mit lex und yacc zu entwickeln. Ich bekomme immer den folgenden Fehler:Schwerwiegender Fehler: Startsymbol leitet keinen Satz ab
calc.y: warning: 5 nonterminals useless in grammar [-Wother]
calc.y: warning: 8 rules useless in grammar [-Wother]
calc.y:8.1: fatal error: start symbol I does not derive any sentence
I : E '\n' {printf("%d\n",$1);}
Ich schaute auf ähnliche Probleme, aber sie hatten unendliche Rekursionen, aber diese hat nicht.
calc.l
%{
#include"y.tab.h"
%}
digits [0-9]*
%%
{digits} {return DIGITS}
%%
int yywrap()
{
}
calc.y
%{
#include<stdio.h>
%}
%token DIGITS
%%
I : E '\n' {printf("%d\n",$1);}
;
E : E '+' F {$$ = $1 + $3;}
| E '-' F {$$ = $1 - $3;}
;
F : F '*' G {$$ = $1 * $3;}
| F '/' G {$$ = $1/$3;}
G :'('E')'
| DIGITS
;
%%
int main()
{
yyparse();
}
int yyerror()
{
}
Aber am Ende verwenden wir den Token DIGITS.So sollte es dort enden –
@anoop, aber Sie kommen nie zum Ende, weil 'E' nicht ein einzelnes' F' noch 'F' ein' G' ableiten kann . – rici
@Anoopsaju Meine Antwort geändert. – melpomene