September 22

This is an update post for #SAOC2020.

My plan for last week was to:
- work more with M4, because the GLR parser will be written in both D and M4, by continuing to work in the Bison repository;
- add documentation for Dlang in Bison's documentation (right now D is part of Bison as an experimental feature; this step would change that);
- start analyzing the existing D LALR1 parser;
- read an article that was recommended to me about LR parsers (details in the next section).

As of last week:
- I started analyzing the D LALR1 code, reading it and testing features along the way - that's how I discovered a bug[0].
- I modified the test, in Dlang and M4, in order to change the return value of yylex() from int to TokenKind[1]. It is still under review. I started adding to Bison's documentation, but it cannot be committed/made public without deciding on the return value of yylex() first - it is part of the Lexer interface, that the user must implement - so this step was pushed back.
- I read and followed the examples from this article[2] recommended by Akim Demaille (one of my mentors and Bison co-maintainer), to better understand the LALR1 and GLR algorithms and to have a smoother transition for learning about GLR.
- I needed a way of extracting the number of characters consumed by std.conv.parse, for location tracking purposes in Bison's D calc example, so I made a PR for dlang/phobos[3].

The plan for next week is:
- to continue analyzing the LALR1 D parser;
- to continue familiarizing myself with the M4 functions used within the repo;
- to start analyzing the C and C++ existing parsers, by writing programs that would help me understand the key differences between them.

General milestones can be found in my first SAoC post[4].