Fajn článek, opět zase něco, co je mi pracovně velmi blízké :)
“Nejedná se tedy v žádném případě o obecné lexikální analyzátory a parsery.”
Teď nedám přesný odkaz, ale v Go existuje knihovna implementující atributové gramatiky, kde se deklarativně napíší bezkontextová pravidla a k nim přímo instance (Go structs), které produkují. Zajímavé je, že v této kombinaci se dají psát parsery i pro některé kontextové jazyky (námět na článek?).
Jo, je to rekurzivní top-down parser (LL znamená left-to-right, leftmost derivation). Každé CF pravidlo je reprezentováno funkcí, která rekurzivně parsuje jeho “pravou stranu”. Je to ale trochu vopruz, člověk si musí hlídat posuny tokenů a chybové hlášky, proto mám raději LR parsery, které prostě automaticky vygenerují tabulky pro automat.
No a mozte skusit rovno drools a jeho DSLR. Priklad:
https://github.com/integrallis/drools-dsl
Definicia DSL:
https://github.com/integrallis/drools-dsl/blob/master/src/main/resources/rules/say_something.dsl
Pravidla pouzitim DSL:
https://github.com/integrallis/drools-dsl/blob/master/src/main/resources/rules/rockys_rules.dslr
Ma to drobne uskalia ale je to jednoduche a rychle kedze vo finale sa z tych pravidiel generuje kod.