Jeffrey Kegler, the author of Marpa, was kind enough to suggest a few changes to the parser from the previous blog post.
Two of the three regular expressions were replaced with calls to the Marpa
recognizer. The first one was replaced with a call to the
which returns the start and length of the lexeme that caused the pause. Passing
these two values to the
literal method which returns the substring from the
input string. This removes the need to mess around with the
pos() from the
The second regular expression that was replaced is the one that matches the
newline. There is no need to match with this regex, because we already know at
which lexeme the parser was paused with a call to the
This method will return 'newline' when that parser found a newline. We only
resume the parser in the right position.
These two changes makes the code simpler, because we don't have to change the
pos() for the input string every time we want to match with the regexes.