otpcl
Crafting Interpreters
Our great sponsors
otpcl | Crafting Interpreters | |
---|---|---|
1 | 45 | |
36 | 8,133 | |
- | - | |
0.0 | 0.0 | |
over 1 year ago | 21 days ago | |
Erlang | HTML | |
ISC License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
otpcl
-
Parser Combinators in Elixir
I guess I can chime in on the "by hand" front, since that's how I ended up going about the first non-trivial parser I wrote[1]: https://github.com/otpcl/otpcl/blob/master/src/otpcl_parse.e...
I'd say the difficulty was moderately high, but that was with no real prior experience with parsers. With that water under the bridge, I'd now rate it at around moderate effort. And the result was gaining a clear and precise understanding of the implicit state machine transitions, and being able to control exactly where and how those transitions happen, such that I didn't really need much of a lexer (the "lexer" just tags each character with its position, so that I didn't have to track that separately in the actual parser code itself).
That said, the result is a bit of a tangled mess; it didn't start that way, but eventually the parsing logic got complex enough that I needed to resort to Erlang's preprocessor macros, and while the end result is manageable through some judicious organization, in hindsight I probably could've done the same with functions, and in a more reusable and maintainable way. If I ever get around to another parser rewrite, I might try using parser combinators or some approximation thereof instead.
----
[1]: Technically the second or third, since I rewrote it a couple times as one can see from the commit history - although said history is a bit hard to pin down across all the renames of the relevant file.
Crafting Interpreters
- Crafting Interpreters
-
The Top 10 GitHub Repositories Making Waves 🌊📊
Build an Interpreter (Chapter 14 on is written in C)
-
Writing a Debugger from Scratch: Breakpoints
I’m guessing you’ll have to work with the scopes in the resolver:
https://github.com/munificent/craftinginterpreters/blob/mast...
-
loxcraft: a compiler, language server, and online playground for the Lox programming language
Better open an issue/request wiki edit at https://github.com/munificent/craftinginterpreters/wiki/Lox-implementations
- Gigachad Ken Thomson.
-
Show HN: Yaksha Programming Language
I'm late to the party, but I want to say thank you for sharing this. It's inspiring to look at how much you've built and (hopefully) enjoyed the process of building! I'm loving everything -- your site, your language design, your docs, your builtin libraries, your dev tools. Beyond impressive. People like you are the ones who make HN one of my best places on the internet.
For context on where I'm coming from, about two weeks ago I picked up Crafting Interpreters [1] for fun. I'm finding your clear-yet-concise Compiler internals [2] to be particularly compelling reading, and jumping back and forth between those "how this all works" docs and the live example of this language you actually built do a WASM-compiled tree-blowing-in-the-wind animation is just... just wow. So freaking cool!
I also enjoyed reading the comment thread that inspired you to start on Yaksha and seeing how this project has a wholesome start as inspiration-by-programming-hero. I hope you recognize that a few years later you've now ascended from inspiree to inspirer. I also hope you're still having tons of fun building out Yaksha!
[1] https://www.craftinginterpreters.com/
[2] https://yakshalang.github.io/documentation.html#compiler-int...
- Keeping track of returned and break-ed values between code blocks
-
How do you start your own programming language?
There are books which will talk you through the process. Crafting Interpreters is highly spoken of; I used Writing an Interpreter in Go, because I like Go. Then there's Compilers: Principles, Techniques, and Tools (the "Dragon Book"). This is considered heavy, but a classic, it's been around since '86.
-
Designing a new language
I cannot recommend Crafting Interpreters by Robert Nystrom enough, it covers a lot of the stuff you need to know, completely for free.
-
A roadmap to design programming languages
Crafting Interpreters is a fun primer on language design. It has a complete roadmap to build a fairly simple language, twice. There are some topics it won't touch on, like static type systems, but it provides a great introduction so that you can start tinkering and learn by doing.