New week, new Rust! What are you folks up to?
This week I'll start implementing a client-server system for updating the firmware of our Zigbee chips. Of course I'm going to implement it in Rust.
I'm working on my LL(1) parser generator to handle more complex ambiguous grammars that have priorities and left-/right-associativity factors, and a mix of recursions, like
E -> 'abs' E | E '^' E | E '!' | E '*' E | '-' E | E '+' E | F;
I must say it's a lot of fun to work on that kind of tools. It has its own lexers and parsers to read the lexicon and grammar self-defining files, and they can now regenerate themselves from those files instead of me having to build their lexer/grammar trees manually. Which was quite easy, but still not as easy to read and maintain.
I had some confusing moments: it's easy to lose track of whether something applies to the tool's own lexers / parsers or those it must produce. The joy of recursively-generated tools.
Another delicate matter is the cross dependencies if I want to base the tool's own lexers and parsers on earlier library revisions, so I can work on the library without having to update them at the same time.
I am currently working on adding support for amx, bf16 and i1 in rustc. This will be useful for linking to more llvm intrinsics as llvm is migrating to i1-based masking instead of int types as masks