[antlr-interest] Anyone have some good Python examples?

Thomas Raef TRaef at wewatchyourwebsite.com
Fri Feb 5 13:23:10 PST 2010


Okay. I would like to thank you all for allowing me to figure out the
errors of my efforts. No sarcasm.

I found out that since Bart was nice enough to get me started, even
though it was a Java example, I didn't realize where my Python program
was starting and what was antlr code.

I discovered that my line: insideFunction = False; was causing the java
compilation to complain so I moved that inside my def. I also realized
that the code: $f.text.toString()); is java and is not part of antlr.
Since I was using language=Python, it had no idea what I was trying to
do.

Now when I run my program, all I get is: STATEMENT ->
(JavaScriptParser.statement_return object at 0x02168C90)

What I want to see is the line of javascript code from the .js file I'm
reading from prefaced with either STATEMENT or FUNCTION.

Can anyone help me with that?

I've watched the tutorials and read through the book, but I cannot for
the life of me figure out how to get the line of javascript to print.

Please help...

Thomas J. Raef



> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Thomas Raef
> Sent: Thursday, February 04, 2010 5:29 PM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] Anyone have some good Python examples?
> 
> I'm trying to get my simple program working and I keep running into
> errors.
> 
> 
> 
> In my JavaScript.g file I've set the language=Python;
> 
> 
> 
> I have a @members section like:
> 
> 
> 
> @members
> 
> {
> 
>                 insideFunction = False;
> 
> 
> 
> def prettyPrint(type, text):
> 
>                 text = text.replace("\r", '') //to remove carriage
> returns in my javascript file (mt.js)
> 
>                 text = text.replace("\n", '') // to remove new lines
> 
>                 if len(text) > 55:
> 
>                                 start = text[:40]
> 
>                                 end = text[-10:]
> 
>                                 text = start+' ... '+end
> 
>                 print type+' -> '+text
> 
> }
> 
> 
> 
> 
> 
> In a JavaScript.G file I have in the functionBody section:
> 
> 
> 
> functionBody
> 
>                 :  '{' {insideFunction=True;) LT!* sourceElements LT!*
> '}' {insideFunction=False;}
> 
>                 ;
> 
> 
> 
> In sourceElement section I have:
> 
> sourceElement
> 
>                 : f=functionDeclaration { prettyPrint("FUNCTION ",
> $f.text.toString()); }
> 
>                 | s=statement { prettyPrint("STATEMENT ",
> $s.text.toString()); }
> 
>                 ;
> 
> 
> 
> Then in python I'm doing:
> 
> import antlr3
> 
> from JavaScriptLexer import JavaScriptLexer
> 
> from JavaScriptParser import JavaScriptParser
> 
> 
> 
> char_stream = antlr3.ANTLRFileStream("mt.js")
> 
> lexer = JavaScriptLexer(char_stream)
> 
> tokens = antlr3.CommonTokenStream(lexer)
> 
> parser = JavaScriptParser(tokens)
> 
> parser.program()
> 
> 
> 
> it barfs:
> 
> 
> 
> prettyPrint("STATEMENT", ((s is not None) and
> [self.input.toString(s.start, s.stop)] or [None])[0].toString());
> 
> NameError: global name 'prettyPrint' is not defined
> 
> 
> 
> I'm trying, but failing. Can anyone with python experience help me
out?
> 
> 
> 
> Thank you in advance.
> 
> 
> 
> Thomas J. Raef
> 
> 
> 
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address


More information about the antlr-interest mailing list