BISON token parsing conflict - Why?
-
hallöchen,
vllt kennt ihr ja das Problem das BISON immer den Fehler "1> Konflikte: 1 Schiebe/Reduziere, 1 Reduziere/Reduziere" bringt.
Ich versteh jedoch nicht ganz wieso. Hab es auch mit unterteilung versucht, ohne erfolg der bringt immernoch den Konflikt.
In folgendem Code versuch ich lediglich den 'Aufbau' (siehe erster Kommentar im Code) zu unterscheiden. Hier hab ich jetzt nur die ersten 3 Unterscheidungen drin.
Legende: FORMULAUNITS_t = Zahlen mit oder ohne Formelzeichen(R|V|A|F) PERCENTVALUE_t = Zahlen mit einem % dahinter t_areaBorder = ";" ts_logicalOperator = "," "." "_" /* Aufbau spezi L U ;220,15% ;220,10%,230 ;220,210,230 ;220,210,10% ;220,10%,20% */ SPEZI_MIN_MAX: t_areaBorder FORMULAUNITS_t ts_logicalOperator PERCENTVALUE_t {// ;220,15% ---> ;220,191.30,253 if(t_status) { printf(">\tSPEZI_f_p\n"); } } | t_areaBorder FORMULAUNITS_t ts_logicalOperator PERCENTVALUE_t ts_logicalOperator FORMULAUNITS_t {// ;220,10%,230 ---> ;220,200,230 if(t_status) { printf(">\tSPEZI_f_p_f\n"); } } | t_areaBorder FORMULAUNITS_t ts_logicalOperator FORMULAUNITS_t ts_logicalOperator FORMULAUNITS_t {// ;220,210,230 if(t_status) { printf(">\tSPEZI_f_f_f\n"); } }
Ausgabe nach bison.exe compile:
1>------ Build started: Project: ICT_FLEX_BISON, Configuration: Debug Win32 ------ 1> Konflikte: 1 Schiebe/Reduziere, 1 Reduziere/Reduziere 1> bison compilation ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Wenn ich 2 der 3 SPEZI_MIN_MAX-Cases rausnehme dann ist kein Konflikt mehr vorhanden, steht ja auch nur noch ein Case da.
Und folgende Änderung resultiert in der selben Ausgabe
DO: t_areaBorder FORMULAUNITS_t ts_logicalOperator SPEZI_MIN_MAX: DO PERCENTVALUE_t {// ;220,15% ---> ;220,191.30,253 if(t_status) { printf(">\tSPEZI_f_p\n"); } } | DO PERCENTVALUE_t ts_logicalOperator FORMULAUNITS_t {// ;220,10%,230 ---> ;220,200,230 if(t_status) { printf(">\tSPEZI_f_p_f\n"); } } | DO FORMULAUNITS_t ts_logicalOperator FORMULAUNITS_t {// ;220,210,230 if(t_status) { printf(">\tSPEZI_f_f_f\n"); } }
Was jemand was ich hier übersehe, oder was ich tun soll?
Danke schonmal,
Adi
-
Könntest du mal ein vollständiges Beispiel posten? Die semantischen Aktionen kannst du rausnehmen. Ansonsten kannst du mit der Option -v erstmal genauere Informationen zu den Parserzuständen und in welchen davon es Konflikte gibt bekommen.