News for hackers. Stuff that matters.
Re:What can we learn from how compilers are designed? by chubot on Friday March 16, 2018 @07:21PM (#16604690)
Regarding splitting lexing and parsing, I argue the opposite point here:

When Are Lexer Modes Useful? http://www.oilshell.org/blog/2017/12/17.html

I assert that scannerless parsing is a bad idea, for reasons of efficiency and code complexity. He's making some argument around generated parsers which I don't understand.

I believe he's conflating the issue of whether you generate your parser with whether you have a separate parser and lexer. (The OSH parser is hand-written, while the lexer is generated. This is actually the opposite of what you see in many languages -- e.g. in Python the parser is generated, while the lexer is hand-written.)

There's no reason that you can't produce good error messages with a separate parser and lexer. In fact I believe you'll get better error messages. I use a "lossless syntax tree" representation which allows good error messages:

From AST to Lossless Syntax Tree http://www.oilshell.org/blog/2017/02/11.html

(On the one hand, it's like a parse tree, but less verbose. On the other, it's like an AST, but it doesn't lose information.)

----

Regarding intermediate representations, I had a lot of success with Zephyr ASDL, which is a DSL for using algebraic data types in procedural/OOP languages:

http://www.oilshell.org/blog/tags.html?tag=ASDL#ASDL

I also don't really see the strong contrast betweeen OOP and FP he's making. Oil uses both styles -- the IR is at the center, using a functional style (data without methods), but the other components are objects/modules/interfaces/encapsulated state/data hiding.

IMO OOP and FP are the same thing when done right: they're about being principled about state. The way I see it, a pure dependency injection style is pretty much equivalent to functional programming.

Python is described with ASDL: https://github.com/python/cpython/blob/master/Parser/Python....

ASDL has some relation to "Stanford University Intermediate Format", which sounds like it could have been a precursor to LLVM IR. In other words it happens to be used in interpreters right now, but it was designed for compilers.

https://www.cs.princeton.edu/research/techreps/TR-554-97

https://suif.stanford.edu/suif/

---

I also wrote about "the Lexer Hack" here: http://www.oilshell.org/blog/2017/12/15.html

There are no comments on this comment yet.