Hallo, ich bin verwirrt darüber, wie ich ein Zeichen* bekomme, wenn ich ein bestimmtes Token lese... Ich schaue in verschiedenen Websites und sie bieten Vorschläge, aber nicht vollständig, ich meine, zum Beispiel yylval und yytext Erklärung fehlt oder wie die Typen zu transformieren, etc.
Was wird in einer .l-Datei benötigt? Was wird in einer .y-Datei benötigt?
Was ich habe
in der .l-Datei:
{WORD} { yylval = strdup(yytext);return T_ValidWord;}
in der .y-Datei:
%union{
char *str;
}
%token<str> T_ValidWord
%%
element:
T_OpenTag T_ValidWord ele1 {printf("%s", $2);}
;
Der Fehler:
xml.lex: In function ‘yylex’:
xml.lex:34: error: incompatible types when assigning to type ‘YYSTYPE’ from type ‘char *’
Eine andere Sache, die mich mehr verwirrt hat: An einigen Stellen sehe ich
yylval->something = yytext
yylval.something = yytext
yylval = yytext
Im Handbuch von Bison steht, dass yylval ein Makro ist, ich verstehe, dass ein Makro Text für anderen Text ersetzt, aber in dieser Situation verstehe ich es wirklich nicht.