Ich versuche, eine Grammatik in Bison zu beschreiben, aber ich bin mir nicht sicher, ob es getan werden kann. My bestimmt Grammatik ist dies:Verschiebung reduzieren Konflikte in einer einfachen (?) Grammatik
%token A B C D SEP
%%
items : /* empty */
| items_nonempty
;
items_nonempty : item
| items_nonempty SEP item
;
item : B
| B SEP D
| B SEP C
| B SEP C SEP D
| A SEP B
| A SEP B SEP D
| A SEP B SEP C
| A SEP B SEP C SEP D
;
"items
" ist eine (möglicherweise leere) Folge von item
Elemente von einem SEP
Token getrennt.
Jeder Artikel besteht aus bis zu 4 Token (A B C D
), in dieser Reihenfolge, getrennt durch SEP
. Die A
, C
und Tokens in einem Element sind optional.
Beachten Sie die Wiederverwendung von demselben Separator-Token September in jedem Element, und zwischen den Einzelteilen selbst.
Ich hoffe, die vorgesehene Grammatik ist klar. Ich denke, es ist eindeutig, aber ich bin mir ziemlich unsicher, ob es ausreichend beschränkt ist, um von Bison analysiert zu werden - leider ist mein Parser-Wissen ziemlich rostig.
die Grammatik als gegeben, Bisons Berichte 4-Verschiebung/Konflikte reduzieren. Mit Blick auf die "Ausgabe" verstehe ich, wo sie auftreten und warum; aber ich weiß nicht, wie (und wenn) die beabsichtigte Grammatik geschrieben werden kann, um die S/R-Konflikte loszuwerden.
Ich bin nicht bereit, eine %expect
Erklärung zu verwenden. Ebenso möchte ich nicht, dass mein Scanner die Separator-Tokens verbraucht, anstatt sie an den Parser weiterzugeben.
Irgendwelche Hinweise, wie diese Grammatik sanieren würde sehr geschätzt werden.