The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.
I feel the need to reach for a bottle whenever someone sends me a screenshot that is actually a picture of a monitor taken with a phone, then printed, then scanned, then faxed, re-scanned, and then embedded in a Word doc and emailed.
And it's a screenshot of some plain-text message that could've been copied/pasted.
By the end of the day I should have a rudimentary implementation of GLoRy, my GLR parser.
GLR is the most powerful parsing algorithm known. It allows you to express your grammar however you want with never any conflicts (all "conflicts" make the GLR fork its stack and try each conflicting rule)
It can process highly ambiguous grammars, including natural language!
The tables are only LALR(1) sized, and how fast it is is inversely proportional to how many times it has been forked. This is all very very good, as it leads to linear time O(n) parsing when there are no ambiguities/forks
Also this is the only GLR implementation i've seen capable of streaming. The rest force you to load the entire document into memory at once.
The upshot of that is you could feed it an entire Bible and not worry about memory.
If there is a parser generator to end all parser generators its this.
It only has one real disadvantage and that's that it's more difficult to use depending on how you're using it. Since it can return multiple parse trees for a single parse the code to use it has to be able to handle that.
Anyway, GLoRy is peak parsing. If you can't parse it with GLoRy chances are it can't be parsed. =)
"The trophy would not fit in the suitcase because it was too big" would render one parse tree.
However, semantic analysis - which is not what my parser does would be further processing on that tree. Because of the final "it", semantic analysis would yield two trees, one where "it" referred to the trophy, and one where "it" referred to the suitcase - it if worked like my parser does.