BTW, here's a simple example of the i_expr production.  Imagine that you have:

f a b
! stuff1
! stuff2

Here I'll walk through how it's parsed, focusing on i_expr.

When i_expr starts, it will in turn call "head" to read in the line; "head" 
will return "(f a b)".  It ends with end-of-line, so we drop to this part of 
the production:
>      | comment_eol // Normal case, handle child lines if any:
>        (indent body2=body {$v = append($head.v, $body2.v);}
>         | empty     {$v = monify($head.v);} /* No child lines */ ))

We have an "indent" after EOL, so we get to the "body2=body" production. Body 
will call i_expr to process. "stuff1".  This i_expr invocation will read a head 
of (stuff1), followed by EOL with no child lines; this i_expr will monify 
"(stuff1)" producing "stuff1" as its return value.  The same thing happens to 
stuff2.  In the end, body will return the list of all the body expressions, in 
this case (stuff1 stuff2).

Once body returns to the production of i_expr that started reading "f a b...", 
the i_expr production will append the body after the head.  In this case, this 
means it will run (append '(f a b) '(stuff1 stuff2)), producing (f a b stuff1 
stuff2) as expected.

ANTLR has some really cool parser-specific debugging capabilities, you can 
plunk in a sample and graphically see the parse tree if you want to walk 
through stuff like this.

--- David A. Wheeler

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Readable-discuss mailing list
Readable-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/readable-discuss

Reply via email to