pocketlang
otpcl
pocketlang | otpcl | |
---|---|---|
1 | 1 | |
1,498 | 36 | |
- | - | |
0.0 | 0.0 | |
5 months ago | over 1 year ago | |
C | Erlang | |
MIT License | ISC License |
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.
pocketlang
-
Hacker News top posts: Jun 23, 2021
Pocketlang\ (60 comments)
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.
What are some alternatives?
q3vm - Q3VM - Single file (vm.c) bytecode virtual machine/interpreter for C-language input
oxide-lang - Oxide Programming Language
blade - A modern general-purpose programming language focused on enterprise Web, IoT, and secure application development.
Dictu - Dictu is a high-level dynamically typed, multi-paradigm, interpreted programming language.
The-C-Programming-Language - Answers to exercises in K&R's The C Programming Language (second Edition).
gravity - Gravity Programming Language
kinx - Looks like JavaScript, feels like Ruby, and it is a script language fitting in C programmers.
endbasic - BASIC environment with a REPL, a web interface, a graphical console, and RPi support written in Rust
espl1000 - [Work in Progress] Toy Compiler <3
Mond - A scripting language for .NET Core
ape - The smart contract development tool for Pythonistas, Data Scientists, and Security Professionals
Crafting Interpreters - Repository for the book "Crafting Interpreters"