a few days ago i saw this pet project on https://git.peppe.rs/languages/tbsp/tree/examples/code-overview/overview.tbsp being a DSL fan, i really like the idea. except seemingly the guy is making a full general purpose interpreter too, which sentences the project to death. i have email him about this (response pending)
as i was thinking however i started wondering if bison could do it given an adaquate lex()
well, the answer is kinda. if you look at the code, well it works.
problems:
- bison doesnt know includes so it would have to be preprocessed (to provide tokens as -perversily- the scanner defines them)
- the tree sitter query language is much more... well lets say verboser than i imagined, so our code has to be much more complexed than i hoped so; either the bison programmer has to type a lot or lex() define a bunch of wrappers which would be language specific
- we are not really using the stack are we?
(unless we do stuff like
BEGIN FUNCTION
/END FUNCTION
to mimic the "original" grammar (which is not bad)) so its a hack to begin with, and because of the above reasons and ugly one of that
so, instead, i do think a DSL is the answer. only issue is that if the guy disagrees on making it "supplementary" then i will have to make my own.
one more thing, a ts node query language would also be nice. something along the lines of
$$->declarator
expanding to a node object (or erroring out safely if the "declarator" named field does not exist)