[antlr-interest] ANTLR3ea+ANTLWorks is *really cool*,
but how do I insert PythonTokenStream.java
Prashant Deva
prashant.deva at gmail.com
Sat Jul 23 13:30:32 PDT 2005
Elden,
I cant understand your problem. Could you explain it a little more,
so that i can provide a nice solution in Antlr Studio?
PRASHANT
On 7/24/05, Elden Crom <eldencrom at comcast.net> wrote:
> Same here for now (putting a class between lexor and parser, works
> fine), but with respect to your (Terence's) quote
> "Why program by hand in five days what you can spend five years of your
> life automating."
> are we out of time yet? :-)
> perhaps it could be added to ANTLR 3's grammar some how....
> ======================================
> ======================================
> <example that covers most of my cases...(through it wouldn't pass coding
> standards!) (make sure its in a non-proportional font to read..).>
> ...
> for x (0,2,12 //no DENT
> 34,43):
> y +=x*2;if(x>12):p+=y; i++; //INDENT before 'p' but not before 'i'
> p/=z;
> /*this too?*/ p/=2; //all of the p assignments are in the
> if(...) block
> //comments don't gen dent errors or cause
> indention to be aquired
> // the /*..*/ comment has no effect but the
> spacing is preserved
> q*=p;
> while(next()):; //gen INDENT ";" and DEDENT
> func(SomeObnoxiouslyLongIdentifier, //no DENT here
> AnotherObnoxiouslyLongIdentifier);
> func2(); //error -- alignment wrong
> if(b):
> c=1; //error -- indent of 'c' must be greater than 'if'
>
> ======================================
> ======================================
>
> The first question is does it belong in the parser or the lexor? (it
> appears to usually sit in between, as a matter of necessity now)
> I know that for my grammar I'm designing, I only want to generate an
> error if the beginning of a statement is not aligned with the previous
> and it is not preceded with a ":". Same for Python. My tendency is to
> think it (control) belongs in the parser.
> Some options (certainly not exhaustive):
> 1) Have a grammar flag that says always generates a INDENT and DEDENT
> token after 'newline()' has been called.
> CON: every statement that can contains a DENT token (arrays, list,
> between if and "(" etc) must have "(DENT)? {ignoreDent()}" all over it.
> PRO: maybe not so bad just make a rule "ig_dent: (INDENT | DEDENT)?
> {ignoreDent()}" ... still ugly
> 2) Have a lexor functions that say look for new dent after a certain
> point (":" in my case) look for new indention
> CON: Somewhat restricts how it can be used.
> PRO: Relatively easy to describe in the lexor and does not put
> allot of jiberish in the parser chunk.
> 3) have the Parser mess with the Lexor's head, by saying where changes
> of indent are allowed
> CON: parser and lexor are no-long stand alone (colorization for
> grammars becomes more difficult, etc.)
> PRO: most flexible
>
> (the grammar for my language.....)
> See 1) above -- in the parser
> statement: statment ';' {checkNextIndent=true;}
> block: ":" {aquireIndent();} compundStatement;
> if: "if" ig_dent expersion ig_dent block
> while: "while" ig_dent expersion ig_dent block
> ....
>
> see 2) above -- in the lexor
> SEMI: ';' {checkIndent=true;};
> COLON: ':' {Indent(),looking_for_indent=true};
> ID: IDENT {
> (looking_for_indent)?aquireIndent():(checkIndent)?verifysameline_or_same_column=true
> }
>
> See 3) above
> {lexor.setIndentionMustBeEqual();}
> statement: statment ';' {lexor.setCheckNextIndent(true);}
> block: ":" {lexor.aquireIndent();} compundStatement;
>
> Of coarse what we have now in 2.7.5 works, ANTLRWorks will need to allow
> for a thing to be inserted between the lexor and parser.
> Maybe just allow for this in the grammar
> <parser>
> { option: insertPostLexor="IndentionSensitiveLexor"}
> <lexor>
>
> Just Musing........................
> (sorry for the length....)
> Elden
>
>
>
> Terence Parr wrote:
>
> >
> > On Jul 11, 2005, at 2:40 PM, Rodrigo B. de Oliveira wrote:
> >
> >> On 7/11/05, Terence Parr <parrt at cs.usfca.edu> wrote:
> >>
> >> Boo also needs virtual indent/dedent tokens. Our current approach is
> >> to insert a IndentTokenStreamFilter that preprocesses white space
> >> tokens and generates indent/dedent virtual tokens as necessary. Will
> >> this approach still be supported in antlr 3.0?
> >
> >
> > Yes, as long as ANTLR's lexer sees imaginary indent/dedent tokens,
> > it's cool :) We'll have to find a way to have this automatically
> > detected and added to the input stream.
> >
> > Ter
> > --
> > CS Professor & Grad Director, University of San Francisco
> > Creator, ANTLR Parser Generator, http://www.antlr.org
> > Cofounder, http://www.jguru.com
> >
> >
> >
>
>
>
More information about the antlr-interest
mailing list