Tirsdag, 19. november, ble utgivelsen presentert re2c – en generator for leksikal analyse (som også er en kompilator for regulære uttrykk til kode i målspråket). re2c spesialiserer seg på å generere raske og lett integrerbare leksikere. Den skiller seg fra den mer kjente analogien flex ved sine fleksible grensesnitt, generering av optimaliserte tabellfrie leksikere og støtte for fangst (submatch extraction) basert på deterministiske endelige automater med merker (TDFA). re2c brukes i prosjekter der hastigheten på leksikeren er viktig, for eksempel i Ninja og PHP.
I versjon 4.0 ble kodegenereringssystemet betydelig omarbeidet, noe som muliggjorde støtte for åtte nye språk (D, Haskell, Java, JavaScript, OCaml, Python, V, Zig) i tillegg til de allerede støttede (C/C++, Go, Rust), samt en generell mekanisme for å legge til nye språk gjennom konfigurasjonsfiler. Kodegeneratoren er ansvarlig for å oversette den allerede byggede og optimaliserte endelige automaten til kode, det vil si at den må velge passende kontrollstrukturer, datatyper, den generelle programmodellen osv. for målspråket. Tidligere var all denne logikken en del av kildekoden til re2c, og for å endre den eller legge til et nytt språk måtte man patchere kildekoden og kompilere re2c på nytt. Slike patches ble ikke akseptert i hovedrepositoriet uten at en standard pakke med eksempler og tester var implementert, noe som ytterligere kompliserte hele prosessen. Nå er all denne logikken overført til syntaksfiler – tekstbaserte konfigurasjonsfiler som kan gis av brukeren (som standard bruker re2c standardfiler). Kildekoden til re2c er helt fri for detaljer om spesifikke språk og stole kun på syntaksfiler. Brukeren kan delvis overstyre eksisterende syntaksfil eller skrive en ny fra bunnen av. For alle offisielt støttede språk er det full dokumentasjon med eksempler.
For øvrig ble selve ideen om syntaksfiler inspirert av en kommentar på LOR, så takk til
the_coder.
Utgivelsen inneholder mange andre endringer for å forenkle brukergrensesnittet, forbedre arbeidet med fangende grupper (capturing groups), og det ble også lagt til et online-miljø for redigering og kompilering av eksempler: http://re2c.org/playground.
Kilde: linux.org.ru
