4 ms·
> You can almost build a yacc grammar that will read C and emit assembly. I have looked at a lot of C parsers and compilers and have written a C to Lisp transp
by sedachv 9y ago
> You can almost build a yacc grammar that will read C and emit assembly.
I have looked at a lot of C parsers and compilers and have written a C to Lisp transpiler and this statement is ludicrously wrong. You cannot even parse C code with yacc because of typedefs. The grammar of C is context-sensitive. And this is after the C code has been preprocessed, something that also cannot be done with yacc.
C compilers are easy to port to different machines, but that is because C is a very poor language in terms of features and control flow constructs. For the limited amount of things that C gives you as a language it also comes with a huge amount of complicated baggage when it comes to implementation and corner cases.
- JoeAltmaier 9y agoTrue about the preprocessor. But the typedef issue is usually (trivially) solved with a link between the symbol table and the scanner.