Ambigue grammatica

In de informatica wordt een contextvrije grammatica een ambigue grammatica genoemd als een bepaalde string, in deze context ook woord of zin genoemd, op verschillende manieren kan worden gegenereerd. Dit houdt in dat er meer syntaxisbomen bestaan voor die string. Omdat een syntaxisboom vaak een-op-een samenhangt met de interpretatie van een zin, is het in de praktijk meestal ongewenst dat een grammatica ambigu is.

Een contextvrije grammatica is eenduidig als ze niet ambigu is. Bij veel ambigue grammatica's bestaat er ook een equivalente eenduidige grammatica, dat wil zeggen een eenduidige grammatica die dezelfde taal genereert. Er bestaan echter ook contextvrije talen die alleen door ambigue grammatica's worden gegenereerd. Zulke talen worden inherent ambigu genoemd. Een voorbeeld van een inherent ambigue taal is { a i b j c k i = j  of  j = k } {\displaystyle \{a^{i}b^{j}c^{k}\mid i=j{\mbox{ of }}j=k\}} .

Voorbeeld

De volgende contextvrije grammatica is ambigu aangezien er verschillende manieren bestaan om de zin a a a {\displaystyle aaa} te genereren:

S a S a {\displaystyle S\rightarrow aSa}
S S S {\displaystyle S\rightarrow SS}
S a {\displaystyle S\rightarrow a}

De zin a a a {\displaystyle aaa} kan op onder andere de volgende manieren worden gegenereerd:

S a S a a a a {\displaystyle S\Rightarrow aSa\Rightarrow aaa}
S S S a S a S S a a S a a a {\displaystyle S\Rightarrow SS\Rightarrow aS\Rightarrow aSS\Rightarrow aaS\Rightarrow aaa}