[antlr-interest] soliciting language recipes book outline feedback

Monty Zukowski monty at codetransform.com
Mon Dec 31 21:35:27 PST 2007


How about C's typedef?  That's always fun.

I'm also really happy with my little expression language which
generates Java code.  All operators and functions are stored in the
tree as functions, and the functions themselves are defined in a
separate file as snippets of ST templates.  I think that would be a
good little recipe, we can chat further about it if you like.  Sample:

expression:  a+b
grammar: addition!: x:atom PLUS y:atom {##=#[#(FUNCTION, "add:2"), x, y];}
tree: (FUNCTION "add:2" a b)
function definition: add($x, $y) ::= <<$x + $y>>
alternate function definition for BigIntegers: add($x, $y) ::= <<$x.add($y)>>

My language handles different types, but for a cookbook you could
leave that out.

Also fun is handling multiple grammars.  For instance our expression
language is mainly for generating strings, so we have a templating
kind of grammar:

{$interpreted_variable} some static text followed by
{$another_variable + $yet_another}

One grammar breaks it into chunks of either static text or code.  If
it is code it calls the expression grammar on the contents.  Must be
similar to the string template grammar.

Ta

Monty

On Dec 31, 2007 1:52 PM, Terence Parr <parrt at cs.usfca.edu> wrote:
> Howdy folks,
>
> I've signed up to do another book for pragmatic programmers.  This
> time I'm going to do a collection of "how to" examples/recipes.  The
> book is meant to teach you how to fish not give you fish--the examples
> will be necessarily smallish. I anticipate the level being
> introductory through intermediate as real, big examples will simply
> not fit. I'd like to start out with really brain-dead examples such as
> comma separated value parsing so that I can explain the fundamentals.
> I will always remember the first technical book I read (on 6502
> assembly code code by Lance Levanthal).  This awesome book started out
> showing how to clear a memory location. This gave me the confidence
> that I might actually understand the rest of the book :)
>
> I propose breaking the book up into three main sections: parsing,
> interpretation, translation. I would love to hear peoples feedback
> about what examples would be useful and exciting.  Keep in mind that
> the average example will need to fit in about 5 to 10 pages. Code
> samples will be made available online and not necessarily completely
> printed out in the book to save space. Also I would love to hear your
> feedback about how the recipes should be laid out or described.
>
> Please CC Susannah Pfalzer, with whom I'm fortunate to work with
> again, on your replies as she is not a member of this list. :)
>
> Here is my rough draft list of examples, which is a bit too few.
> Thanks and happy new year!
>
> Ter
> ------------
> I. Parsing recipes
>         comma-separated values (show in java then python or ruby then ANTLR)
>         parsing binary data (fixed and non-fixed size records)
>         parsing log files (in awk/sed/grep then ANTLR)
>         configuration file or JSON or YAML
>         text-based network protocol (e.g., POP, nntp, http)
>         graphs and networks via edge list format
>         read fixed a XML format like:
>                 SVG (vector graphics)
>                 or, RDF ontology graph
>         handling include files
>         parsing island grammars like JSP
>         simplified English imperative statement recognizer
>                 (E.g., games: "pick up gun and shoot spy")
>
> II. Interpretation recipes
>         arithmetic expression trees
>         polynomial differentiation
>         query language (parse and pull data from DB)
>         serial/deserialize objects
>         partial PS interpreter
>         simple programming language interpreter
>
> III. Translation recipes
>         wiki to HTML
>         simplified programming language pretty printer
>         instrumenting simplified programming language with profiling info
>         simple Java byte code generator
>         simple robot control language for lego MindStorm robots
>         class hierarchy generator (awk/sed/grep then grep+ANTLR)
>                 generates DOT format for graphviz to visualize
>


More information about the antlr-interest mailing list