By default, Parenscript writes output to a string. You can output directly to a stream in one of two ways:
Maybe this interests you http: So I think it would be really hard to auto-translate a yacc program into a Lisp program. Your best bet is to hand-translate the yacc grammar into CL-yacc or what other tools there are.
I think C would be far too complex and weird grammar-wise to allow nice hand-written parsers. Is Emacs Lisp inappropriate somehow? Thanks for this tip - I never heard of the Bovinator before. The documentation and some tutorial material is on my to-do list. However, it is widely acknowledged that parsing C is a rather ugly problem, more work than it is worth.
I would suggest you duct tape some existing parser onto your front end and see how Lisp works for the interesting stuff. If your compiler works really well and you want to make it independently portable, that would be the time to deal with the unpleasant task of parsing.
C Use Zebu http: Zebu is a CL parser generator for CL.
D There are sources available for a C compiler written in Zetalisp http: Cliki says it is not trivially portable, but perhaps ripping out the parser and porting it to CL is not as difficult.
I agree with Steven that the parsing is probably the least interesting part of your project, so just find something that works and move on to the interesting things. You can always replace it later. I would appreciate it, however, if you could make sure to credit me as the original author in the documentation of any software that uses these sources.
This is most definitely work in progress; while a variant of this code has successfully parsed a few thousands lines of C, it is known to be incomplete and buggy. Design and Implemenation" by Fraser and Hanson which describes the lcc compiler. Fraser and Hanson and Davidson invented some blazing compiler-compiler technologies, including the ideas used by GCC.
Lcc uses a newer technology called lburg. You invariably insert bugs as you do this, but the extent of the bugs is never too daunting since you know the orignal worked.
The process of debugging your own bugs makes you intimately familiar with the workings of the code. And the whole process takes much, much less time than inventing all of the code from scratch. It has 13 operators and does better at managing the hard stuff - like semantics and code generation - than yacc and friends.
As it parses, it auto-magically generates a tree. It also contains experimental functionality for changing parsers on-the-fly and producing a unity transform of the source Why? Because a lot of things I do involve source-to-source translation. Too complicated for Perl - needs parser technology.
But, almost no existing parser technology preserves comments and leaves the formatting alone I think Antlr might have some painful extentensions for this feature.
It is a purely functional language originally built for source-to-source transformation and language-design experimentation.
It uses a backtracking parser. With some thought, you too could do this using only lisp. The site appears to be http:REPL is a common pattern for interpreters, especially LISP.
A ConsBoxFactory is available to make new cons boxes and to operate on them.
An AtomFactory is used so that equivalent symbolic atoms map to exactly one object. A native compiler for 8-bit PIC micro controllers written in Common Lisp. - takagi/pic.
Parenscript Reference Manual Table of Contents. Notation used in this manual; The Parenscript compiler; and are useful for writing automated tests.
By default, Parenscript writes output to a string. Parenscript can also call out to arbitrary Common Lisp code at output time. The Lisp runtime includes the Lisp compiler itself, which is transparently available at runtime.
Java is strictly OOP in a style close to C++. Lisp is multi-paradigm, so you'll first write code in procedural imperative style, then perhaps in functional style. DEFPSMACRO is a Lisp form (not a Parenscript one!) that can be used by Lisp code to define Parenscript macros without calling the Parenscript compiler.
The representation of Parenscript macro functions is the same as that of Common Lisp, and in fact . Take a look at Clozure Common Lisp for an example of assembly language used in implementing a lisp. Clozure CL is mostly implemented in Common Lisp itself, but there is a kernel written in C and some low level functionality in assembly.