
Show HN: ShivyC – Hobby C compiler created in Python - ssarodia
https://github.com/ShivamSarodia/ShivyC
======
userbinator
The parser has a somewhat unusual structure:

[https://github.com/ShivamSarodia/ShivyC/blob/master/shivyc/p...](https://github.com/ShivamSarodia/ShivyC/blob/master/shivyc/parser/statement.py)

It's been a while since I've had to use the phrase "exception-oriented
programming", but it fits that code well. While that might be a useful or even
necessary pattern to parse something like C++ which can have almost unbounded
ambiguities, AFAIK C can be parsed solely by branching on the next token in
the stream except for one tiny case (typedefs).

~~~
JasonFruit
That's not an uncommon practice in Python based on its (relatively) fast
handling of exceptions. Maybe you could call it "break things and move fast."

~~~
lou1306
Using exceptions is totally common, but this seems to raise/catch/log 6 errors
each time it tries to parse a `for` statement. I'm a noob when it comes to
compilers, but maybe a token -> function dictionary would be a better
approach?

~~~
JasonFruit
That does sound a bit extreme. (I freely admit I went by this description and
never looked at the parser code myself, though some other portions I _did_
read were pretty normal Python.)

------
deaddodo
Now, compile CPython in it and you're fully boot strapped.

~~~
rs86
Cool!!!!!! Really cool! Did you try it?

