On 10/22/07, Allison Randal <[EMAIL PROTECTED]> wrote: > > Klaas-Jan Stol wrote: > > Hi, > > > > Last few days i've been working on a complete reimplementation of IMCC's > > grammar. It can be found in compilers/pirc/new. THere's no Makefile yet, > as > > I didn't know how to create this in a portable way (as flex and bison > are > > needed). No tests yet either, I only do that with small test files on my > pc. > > > > I found updating and fixing IMCC's grammar rather difficult and no fun > as > > there's a lot of unclear stuff. A clean implementation can resolve the > > trouble of changing the PIR language. > > It's a good prototyping approach. We'll keep an eye on your progress and > decide at some later date how to integrate the work (merge/replace). > > > Up till now, things worked out pretty well. Although it's not completed > yet > > (and only focus on the parsing, > > not on the semantic stuff), the new implementation has the following > > features: > > > > * no grammar kludges, like %PREC, yy_clear_state(), and /* this is ugly > */ > > comments > > +1 > > > * nice opportunity to clean up some dark corners of IMCC's grammar. Did > > youknow you could define a namespace like this: ".namespace ['a' .. > 'b']" ? > > I can't imagine what this should mean. > > Can be considered deprecated. Can even be added to DEPRECATED.pod.
will do. > * removal of (almost) all globals. I'm not sure about some built-in > globals, > > like "yytext". In any case, the goal is to make it reentrant. > > * support for multiple heredocs, allowing to write: > > .sub foo(<<'A', <<'B', <<'C') > > hi > > A > > hi there > > B > > hi again > > C > > > > * A clean implementation of the .include directive > > +3 > > > * .constant directive works, but I found out IMCC only allows it in PASM > > mode. If this is desired behaviour, I have to change my implementation. > > Currently constants are declared as .const in PIR and .constant in PASM. > These two should be merged into one. I don't have a strong preference > but lean toward keeping .constant and deprecating .const (the full word > is generally more readable). > > > * comments. Lots of it. > > * beginning implementation of macros. > > * the lexer spec. is processable by cygwin's default flex version (I > think > > imcc.l can't be processed with that version) > > +3 > > > * an opportunity to decide how PIR should parsed w.r.t. PASM. SHould PIR > be > > converted to PASM, or should it be interpreted from PIR source > immediately? > > Both options should be possible. PASM is just a human readable form of > bytecode, so anything that can be translated to bytecode can be > translated to PASM. But, we don't need to require PASM as an > intermediate step between PIR and bytecode. I see. I'm not ready yet for semantic stuff,I'll have to look into it, I never looked into IMCC's semantic actions. > * A basic pre-process option (using "-E"), which shows the user the input > as > > it is read by the parser. > > Sounds good. Why "-E"? *E*arly? *E*xellent? I stole it from IMCC :-) > Before I continue on finishing the macros, however, I think it'd be nice > to > > set up some kind of feature list of what macros should be able to do. I > > don't want to put in a lot of effort finishing the macro stuff, only to > find > > out that new features should be added/removed. Recently, there was a bit > > discussion on list about local variables in macros, which could be added > > (that generate unique vars, just like .local/.label does for labels > > currently). > > Thanks for the beginning spec. I'll review it as part of PDD 19 (which > smash tells me is ready for at least the first review). > > Allison I also just added a README.pod file in which I try to be clear in what the differences are with IMCC, and of course the improvements over IMCC. Thanks for your feedback! kjs