Tijdens zijn promotieonderzoek aan het CWI heeft Bas Basten een tool ontwikkeld om programmeertalen te controleren op constructies die dubbelzinnigheden toelaten. Dat komt van pas bij het ontwikkelen van nieuwe talen, bijvoorbeeld domeinspecifieke (DSL‘s). Basten verdedigt zijn proefschrift komende donderdag.
Een dubbelzinnigheid is als de compiler een constructie in de broncode op meerdere manieren kan uitleggen. Een bekend voorbeeld is de ’hangende else‘: in de constructie if x if y … else … is het onduidelijk of de else op de eerste of tweede conditie slaat. Een programmeertaal mag dit soort dubbelzinnigheden niet toestaan.
Om deze bugs op te sporen, zijn er twee aanpakken. De ene is om alle mogelijke zinnen in een taal te genereren en vervolgens te controleren of ze op meerdere manieren geïnterpreteerd kunnen worden. Dit is erg tijdrovend. De andere is om de grammatica te benaderen met een simpelere vorm die wel snel geanalyseerd kan worden. Dit kan echter valse positieven genereren. Bastens tool, Ambidexter genaamd, combineert beide aanpakken. Eerst wordt met de benadering alles weggefilterd dat zeker niet dubbelzinnig is. Vervolgens wordt op de rest een uitputtende controle gedaan. De analyse kan daarmee tot duizenden keren sneller verlopen dan voorheen.

