<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Parser-tools</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>Recent changes to Parser-tools</description><atom:link href="https://sourceforge.net/p/readable/wiki/Parser-tools/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 22 Dec 2012 22:46:26 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/readable/wiki/Parser-tools/feed" rel="self" type="application/rss+xml"/><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v6
+++ v7
@@ -26,19 +26,15 @@
 ANTLR - capable, BSD, LL(*)
 =============================

-As a practical matter must buy book ($24 for v3 electrons, inc. PDF).
-Extremely popular, active development, lively support.
-Many generated languages, including Javascript (for v3).
-On Fedora, install "antlr3" (just "antlr" installs v2) - very convenient!
-
-   Complication: In a major version
-   transition; ANTLR v4 due out Dec. 2012, v4 book draft out.
-   But that one is Java-only for now, and looks like documentation
-   is really sketchy for v4.  It might be best to stick with v3 for now.
-
-   Notation looks really clean.
-
-   http://antlr.org/
+ANTLR is probably one of the most popular LL-based parser generators today.
+
+As a practical matter must buy book ($24 for v3 electrons, inc. PDF). Extremely popular, active development, lively support. Many generated languages, including Javascript (for v3). On Fedora, install "antlr3" (just "antlr" installs v2) - very convenient!
+
+The current version as of 2012 is version 3 (v3).  ANTLR v4 due out Dec. 2012, v4 book draft out. But ANTLR v4 is radically different; it accepts far more than LL (which is probably a good thing for many users, but not what we want for our purposes).  Version 4 is Java-only for now, and looks like documentation is really sketchy for v4.  It might be best to stick with v3 for now.
+
+Notation looks really clean.
+
+http://antlr.org/

 &lt;pre&gt;
    Example (v3):
&lt;/pre&gt;


&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sat, 22 Dec 2012 22:46:26 -0000</pubDate><guid>https://sourceforge.net5c60f032a9b644842f5b426d71c8f71acb9fad5d</guid></item><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -64,6 +64,13 @@
 *   "How to get a list of all valid options for the next token?" http://www.antlr.org/wiki/pages/viewpage.action?pageId=11567208 - explains how to retrieve follow set at run time.

+Sadly, changing modes in a lexer isn't so easy in most LL tools.
+
+*   Context-sensitive scanning - http://javadude.com/articles/antlr-context-sensitive-scanner.html talks about how to do this in ANTLR.  The real problem is that lexers "push" data naively, but really, the parser should "pull" request from the lexer when it's ready.
+*   http://www.antlr.org/wiki/display/ANTLR3/Another+solution+for+Island+Grammars+Under+Parser+Control shows how to use Gated Semantic Predicates and separate grammar rules.
+
+Some old ANTLR v2 docs: http://www.antlr2.org/doc/lexer.html  http://ftp.camk.edu.pl/camk/chris/antlrman/antlrman.pdf
+

 Coco/R
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 19 Dec 2012 21:49:35 -0000</pubDate><guid>https://sourceforge.neta9192fb5e93ca0bf7839bbf12835b5ec19d4a53a</guid></item><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -56,6 +56,15 @@
     ;
 &lt;/pre&gt;

&lt;p&gt;+Here are some potential ANTLR pointers:&lt;br /&gt;
+&lt;br /&gt;
+&lt;em&gt;   "How can I emit more than a single token per lexer rule?" &lt;a href="http://www.antlr.org/wiki/pages/viewpage.action?pageId=3604497"&gt;&lt;a href="http://www.antlr.org/wiki/pages/viewpage.action?pageId=3604497"&gt;http://www.antlr.org/wiki/pages/viewpage.action?pageId=3604497&lt;/a&gt;&lt;/a&gt; - may be useful for processing indents&lt;br /&gt;
+&lt;/em&gt;   "How do I selectively ignore tokens depending on parser context?" - &lt;a href="http://www.antlr.org/wiki/pages/viewpage.action?pageId=1734"&gt;http://www.antlr.org/wiki/pages/viewpage.action?pageId=1734&lt;/a&gt; - may help with comments inside head.&lt;br /&gt;
+&lt;em&gt;   "How can I allow keywords as identifiers?" &lt;a href="http://www.antlr.org/wiki/pages/viewpage.action?pageId=1741"&gt;&lt;a href="http://www.antlr.org/wiki/pages/viewpage.action?pageId=1741"&gt;http://www.antlr.org/wiki/pages/viewpage.action?pageId=1741&lt;/a&gt;&lt;/a&gt; - may help with backslash backslash&lt;br /&gt;
+&lt;/em&gt;   "How to get a list of all valid options for the next token?" &lt;a href="http://www.antlr.org/wiki/pages/viewpage.action?pageId=11567208"&gt;http://www.antlr.org/wiki/pages/viewpage.action?pageId=11567208&lt;/a&gt; - explains how to retrieve follow set at run time.&lt;br /&gt;
+&lt;br /&gt;
+&lt;br /&gt;
+&lt;/p&gt;
&lt;p&gt;Coco/R&lt;br /&gt;
 ========&lt;br /&gt;
&lt;/pre&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 19 Dec 2012 21:23:18 -0000</pubDate><guid>https://sourceforge.net5d1b8b7ce6fc87cbb18b08617b02d0f1cb884c83</guid></item><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -26,10 +26,10 @@
 ANTLR - capable, BSD, LL(*)
 =============================

-   As a practical matter must buy book ($24 for v3 electrons, inc. PDF).
-   Extremely popular, active development, lively support.
-   Many generated languages, including Javascript (for v3).
-   On Fedora, install "antlr3" (just "antlr" installs v2) - very convenient!
+As a practical matter must buy book ($24 for v3 electrons, inc. PDF).
+Extremely popular, active development, lively support.
+Many generated languages, including Javascript (for v3).
+On Fedora, install "antlr3" (just "antlr" installs v2) - very convenient!

    Complication: In a major version
    transition; ANTLR v4 due out Dec. 2012, v4 book draft out.
@@ -40,6 +40,7 @@

    http://antlr.org/

+&lt;pre&gt;
    Example (v3):
     expr    : term ( ( PLUS | MINUS )  term )* ;
     term    : factor ( ( MULT | DIV ) factor )* ;
@@ -53,7 +54,7 @@
     |  INT
     |  '(' expr ')'
     ;
-
+&lt;/pre&gt;

 Coco/R
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 19 Dec 2012 19:04:41 -0000</pubDate><guid>https://sourceforge.net1324ec16f21c749ab21aeb8d1a4992c627378a4f</guid></item><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -20,8 +20,8 @@
 *   Gens multiple languages (to avoid baked-in stuff)

-
-****LIST OF TOOLS****
+Below are a list of tools, followed by other notes.
+

 ANTLR - capable, BSD, LL(*)
 =============================
@@ -111,7 +111,21 @@
       so it's painful to read).

-
+Parsec
+======
+
+Haskell's Parsec library combined with Haskell's
+Monad Transformer library allows using the same syntax for both INDENT
+/ DEDENT / SAME -guarded parsers, and basic parsers (like n-expr) that
+don't have INDENT/DEDENT/SAME, and allowing the second to be used
+inside the first.
+
+
+Wheeler agrees that having a parser with significant indent-processing capabilities would be a big plus.  But Wheeler didn't include Parsec for several reasons, all based on the fact that Parsec is totally tied to Haskell:
+
+*   I have serious notation concerns. We want to create a spec that will be read by others as part of the SRFI. ANTLR's notation is really excellent, it looks "just like the books". APG's is nasty. When I look at the Parsec example here: http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing it's clear that the Parsec notation is basically... Haskell. (Well, what a surprise :-) ). I like Parsec's notation better than APG's, but Parsec's notation is a REALLY different notation than "usual" BNFs and is not at all "what the books use".
+*   A *lot* of people don't grok Haskell, and it's certainly not my strongest language either. I particularly worry that we'll need to handle certain cases specially if we want to seriously implement the spec with the tool, and at that point I'll end up throwing up my hands. I'm confident of my ability to fiddle with ANTLR and its ilk, but not with Parsec/Haskell. There are ports of Parsec, but they're tied to their languages too, and it's not clear that the ports are as widely used/supported.
+*   It'd also be nice to be able to generate Javascript, so that we could have it working directly on the website. Parsec can't do that, again since it's tied to Haskell. That's not as important as the other issues.

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 19 Dec 2012 19:03:01 -0000</pubDate><guid>https://sourceforge.net31115907c67853f736bbed24bf5a90198b077d1d</guid></item><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,10 +1,12 @@
-
 Here are notes on various parsing tools that might help develop specifications or implementations of sweet-expressions.

+Overall
+=========
+
 We want an LL-based tool, to help check recursive descent, enable us to create a good spec, and possibly develop an implementation.

-A ist of parser generators is here: http://en.wikipedia.org/wiki/Comparison_of_parser_generators
+A list of parser generators is here: http://en.wikipedia.org/wiki/Comparison_of_parser_generators

 Requirements:

@@ -21,7 +23,8 @@

 ****LIST OF TOOLS****

-ANTLR - capable, BSD, LL(*).
+ANTLR - capable, BSD, LL(*)
+=============================

    As a practical matter must buy book ($24 for v3 electrons, inc. PDF).
    Extremely popular, active development, lively support.
@@ -53,7 +56,10 @@

-Coco/R - capable: Attributed grammar, LL(k). GPL (with exceptions, no prob).
+Coco/R
+========
+
+capable: Attributed grammar, LL(k). GPL (with exceptions, no prob).
       Different programs for different generated languages (ugh,
       but not relevant?) Coco/R EXAMPLE:

@@ -67,7 +73,10 @@
     http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/

-Grammatica: "C# and Java parser generator (compiler compiler). It improves upon simlar tools (like yacc and ANTLR) by creating well-commented and readable source code, by having automatic error recovery and detailed error messages, and by support for testing and debugging grammars without generating source code."
+Grammatica
+==========
+
+"C# and Java parser generator (compiler compiler). It improves upon simlar tools (like yacc and ANTLR) by creating well-commented and readable source code, by having automatic error recovery and detailed error messages, and by support for testing and debugging grammars without generating source code."
 "Grammatica supports LL(k) grammars with an unlimited number of look-ahead tokens." GNU LGPL.  Example:

     ImportList = "IMPORTS" SymbolsFromModule* ";" ;
@@ -76,7 +85,10 @@

-JavaCC : Claims "most popular" for Java.  Originally by Sun.
+JavaCC
+=======
+
+ Claims "most popular" for Java.  Originally by Sun.
   Originally wasn't OSS, now it is.

   Slightly ugly notation; productions have type declarations and look
@@ -89,7 +101,10 @@
     }

-APG - capable, GPL, web version.  Lots of capabilities. Can gen Javascript,
+APG
+====
+
+Capable, GPL, web version.  Lots of capabilities. Can gen Javascript,
       and that's a big plus.
       Ugh: Uses prefix repetition notation *(...), a BNF notation
       I (wheeler) really hate (it's not what the textbooks do,
@@ -100,7 +115,9 @@

-NO:
+Rejected tools
+============
+

 AXE - Baked into C++.

@@ -111,7 +128,8 @@

-Here are some random web pages and notes:
+Random web pages and notes
+=============================

 The traditional way to parse indentation-sensitive languages is based
 on Python's approach, inserting INDENT and DEDENT tokens as appropriate.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 19 Dec 2012 19:00:50 -0000</pubDate><guid>https://sourceforge.netedb8940ff6ae34b1389b629669a2ab89c25a0702</guid></item><item><title>WikiPage Parser-tools modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Parser-tools/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Here are notes on various parsing tools that might help develop specifications or implementations of sweet-expressions.&lt;/p&gt;
&lt;p&gt;We want an LL-based tool, to help check recursive descent, enable us to create a good spec, and possibly develop an implementation.&lt;/p&gt;
&lt;p&gt;A ist of parser generators is here: &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_parser_generators"&gt;http://en.wikipedia.org/wiki/Comparison_of_parser_generators&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LL... or recursive descent.  LL(k) preferred.&lt;/li&gt;
&lt;li&gt;OSS, GPL-compatible&lt;/li&gt;
&lt;li&gt;EBNF, so can say x* instead of multiple productions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maintained/Widely-used&lt;/li&gt;
&lt;li&gt;Gens multiple languages (to avoid baked-in stuff)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;*LIST OF TOOLS&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;
&lt;p&gt;ANTLR - capable, BSD, LL(*).&lt;/p&gt;
&lt;p&gt;As a practical matter must buy book ($24 for v3 electrons, inc. PDF).&lt;br /&gt;
   Extremely popular, active development, lively support.&lt;br /&gt;
   Many generated languages, including Javascript (for v3).&lt;br /&gt;
   On Fedora, install "antlr3" (just "antlr" installs v2) - very convenient!&lt;/p&gt;
&lt;p&gt;Complication: In a major version&lt;br /&gt;
   transition; ANTLR v4 due out Dec. 2012, v4 book draft out.&lt;br /&gt;
   But that one is Java-only for now, and looks like documentation&lt;br /&gt;
   is really sketchy for v4.  It might be best to stick with v3 for now.&lt;/p&gt;
&lt;p&gt;Notation looks really clean.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://antlr.org/"&gt;http://antlr.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Example (v3):&lt;br /&gt;
    expr    : term ( ( PLUS | MINUS )  term )&lt;em&gt; ;&lt;br /&gt;
    term    : factor ( ( MULT | DIV ) factor )&lt;/em&gt; ;&lt;br /&gt;
    factor  : NUMBER ;&lt;/p&gt;
&lt;p&gt;Example (v4) (it appears it has some LL left-recursion extensions):&lt;br /&gt;
    grammar Expr;     &lt;br /&gt;
    prog:   (expr NEWLINE)&lt;em&gt; ;&lt;br /&gt;
    expr:   expr ('&lt;/em&gt;'|'/') expr&lt;br /&gt;
        |   expr ('+'|'-') expr&lt;br /&gt;
    |   INT&lt;br /&gt;
    |   '(' expr ')'&lt;br /&gt;
    ;&lt;/p&gt;
&lt;p&gt;Coco/R - capable: Attributed grammar, LL(k). GPL (with exceptions, no prob).&lt;br /&gt;
      Different programs for different generated languages (ugh,&lt;br /&gt;
      but not relevant?) Coco/R EXAMPLE:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;CompilationUnit&lt;/span&gt;
&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &amp;quot;&lt;span class="n"&gt;package&lt;/span&gt;&amp;quot; &lt;span class="n"&gt;Qualident&lt;/span&gt; &lt;span class="s"&gt;';'&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;ImportDeclaration&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;TypeDeclaration&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
           &lt;span class="p"&gt;(.&lt;/span&gt; &lt;span class="n"&gt;CODE&lt;/span&gt; &lt;span class="n"&gt;HERE&lt;/span&gt; &lt;span class="p"&gt;.)&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ssw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uni&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Research&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Coco&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Grammatica: "C# and Java parser generator (compiler compiler). It improves upon simlar tools (like yacc and ANTLR) by creating well-commented and readable source code, by having automatic error recovery and detailed error messages, and by support for testing and debugging grammars without generating source code."&lt;br /&gt;
"Grammatica supports LL(k) grammars with an unlimited number of look-ahead tokens." GNU LGPL.  Example:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;ImportList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &amp;quot;&lt;span class="n"&gt;IMPORTS&lt;/span&gt;&amp;quot; &lt;span class="n"&gt;SymbolsFromModule&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &amp;quot;&lt;span class="p"&gt;;&lt;/span&gt;&amp;quot; &lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;grammatica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;percederberg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;JavaCC : Claims "most popular" for Java.  Originally by Sun.&lt;br /&gt;
  Originally wasn't OSS, now it is.&lt;/p&gt;
&lt;p&gt;Slightly ugly notation; productions have type declarations and look&lt;br /&gt;
  like Java.  Reasonable if you're doing Java of course, but&lt;br /&gt;
  not the point in this case.  You enter ".jj" files.  Example:&lt;br /&gt;
    void enumerator() :&lt;br /&gt;
    {}&lt;br /&gt;
    {&lt;br /&gt;
        ("=" constant_expression())?&lt;br /&gt;
    }&lt;/p&gt;
&lt;p&gt;APG - capable, GPL, web version.  Lots of capabilities. Can gen Javascript,&lt;br /&gt;
      and that's a big plus.&lt;br /&gt;
      Ugh: Uses prefix repetition notation *(...), a BNF notation&lt;br /&gt;
      I (wheeler) really hate (it's not what the textbooks do,&lt;br /&gt;
      so it's painful to read).&lt;/p&gt;
&lt;p&gt;NO:&lt;/p&gt;
&lt;p&gt;AXE - Baked into C++.&lt;/p&gt;
&lt;p&gt;HiLexed - looks unfinished.&lt;/p&gt;
&lt;p&gt;SableCC - LALR.&lt;/p&gt;
&lt;p&gt;Here are some random web pages and notes:&lt;/p&gt;
&lt;p&gt;The traditional way to parse indentation-sensitive languages is based&lt;br /&gt;
on Python's approach, inserting INDENT and DEDENT tokens as appropriate.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://erezsh.wordpress.com/2008/07/12/python-parsing-1-lexing/"&gt;http://erezsh.wordpress.com/2008/07/12/python-parsing-1-lexing/&lt;/a&gt;&lt;br /&gt;
 - gives pseudocode and shows a C# ANTLR implementation&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/232682/how-would-you-go-about-implementing-off-side-rule"&gt;http://stackoverflow.com/questions/232682/how-would-you-go-about-implementing-off-side-rule&lt;/a&gt;&lt;br /&gt;
  - Inserts LINE (newline) as first stage (with indents), then adds&lt;br /&gt;
    INDENT/DEDENT while keeping LINE.  Says it has better results&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.antlr.org/pipermail/antlr-interest/2012-June/044736.html"&gt;http://www.antlr.org/pipermail/antlr-interest/2012-June/044736.html&lt;/a&gt;&lt;br /&gt;
  - ANTLR indent/dedent&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/sirthias/parboiled/wiki/Indentation-Based-Grammars"&gt;https://github.com/sirthias/parboiled/wiki/Indentation-Based-Grammars&lt;/a&gt;&lt;br /&gt;
  - Parboiled builds in indentation processing&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mail.python.org/pipermail/tutor/2009-January/066395.html"&gt;http://mail.python.org/pipermail/tutor/2009-January/066395.html&lt;/a&gt;&lt;br /&gt;
  - Email discussion about parsing, with INDENT/DEDENT&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/1513020/how-do-i-do-python-style-indent-dedent-tokens-with-alex-haskell"&gt;http://stackoverflow.com/questions/1513020/how-do-i-do-python-style-indent-dedent-tokens-with-alex-haskell&lt;/a&gt;&lt;br /&gt;
  - Discussion about implementing indentation with Alex &amp;amp; Haskell.&lt;br /&gt;
    Asserts that most people do this in the lexer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://antlr.1301665.n2.nabble.com/emitting-multiple-tokens-INDENT-DEDENT-td7578225.html"&gt;http://antlr.1301665.n2.nabble.com/emitting-multiple-tokens-INDENT-DEDENT-td7578225.html&lt;/a&gt;&lt;br /&gt;
  - Sample indentation processing with ANTLR&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/antlr/examples-v3/blob/master/java/python/PythonTokenSource.java"&gt;https://github.com/antlr/examples-v3/blob/master/java/python/PythonTokenSource.java&lt;/a&gt;&lt;br /&gt;
  - ANTLR source Python tokenizer&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobilesystemsengineering.appspot.com/staticdocs/AdvancedMobileSystemsEngineering/Solution1.txt"&gt;http://mobilesystemsengineering.appspot.com/staticdocs/AdvancedMobileSystemsEngineering/Solution1.txt&lt;/a&gt;&lt;br /&gt;
  - ANTLR repairs for Python; may be OBE&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jarvana.com/jarvana/view/org/python/jython/2.5.0/jython-2.5.0-sources.jar"&gt;http://www.jarvana.com/jarvana/view/org/python/jython/2.5.0/jython-2.5.0-sources.jar&lt;/a&gt;!/org/python/antlr/PythonTokenSource.java?format=ok&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/bamboo/boo/tree/master/src"&gt;https://github.com/bamboo/boo/tree/master/src&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jarvana.com/jarvana/view/org/python/jython/2.5.0/jython-2.5.0-sources.jar"&gt;http://www.jarvana.com/jarvana/view/org/python/jython/2.5.0/jython-2.5.0-sources.jar&lt;/a&gt;!/org/python/antlr/PythonTokenSource.java?format=ok&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shaurz.wordpress.com/2008/03/11/haskell-style-parser-combinators-in-scheme/"&gt;http://shaurz.wordpress.com/2008/03/11/haskell-style-parser-combinators-in-scheme/&lt;/a&gt;&lt;br /&gt;
  - Haskell-style parser combinators in Scheme.  "We can define a parser as a procedure which takes an input string and an index (i.e. the index of the current character on the input). If the parse succeeds, it returns a value and an index ≥ the original index to the unconsumed input. On failure it returns #f for the both the value and index (the index is checked for failure and the value is ignored)."&lt;br /&gt;
  - Links to more.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://weblambda.blogspot.com/2009/10/building-parser-combinators-in-scheme.html"&gt;http://weblambda.blogspot.com/2009/10/building-parser-combinators-in-scheme.html&lt;/a&gt;&lt;br /&gt;
  - Comments on How to build a parser combinator in Scheme.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/5507665/are-there-any-ll-parser-generators-for-functional-languages-such-as-haskell-or-s"&gt;http://stackoverflow.com/questions/5507665/are-there-any-ll-parser-generators-for-functional-languages-such-as-haskell-or-s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Several sources talk about sllgen, a simple LL(1) tool in Scheme&lt;br /&gt;
used in many courses per "Essentials of Programming Languages"&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.ccs.neu.edu/course/cs7400/lectures/lecture02.pdf"&gt;http://www.ccs.neu.edu/course/cs7400/lectures/lecture02.pdf&lt;/a&gt;&lt;br /&gt;
  - Simple example use of sllgen&lt;/p&gt;
&lt;p&gt;&lt;a href="http://docs.racket-lang.org/eopl/index.html"&gt;http://docs.racket-lang.org/eopl/index.html&lt;/a&gt;&lt;br /&gt;
  - Talks about "Essentials of Programming Languages" language in DrRacket,&lt;br /&gt;
    cross-refs sllgen stuff.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cs.indiana.edu/eopl/code/interps/sllgen.scm"&gt;http://www.cs.indiana.edu/eopl/code/interps/sllgen.scm&lt;/a&gt;&lt;br /&gt;
  - sllgen source code.  Scheme LL(1) parser generator&lt;/p&gt;
&lt;p&gt;&lt;a href="http://3e8.org/zb/eggs/lexing.txt"&gt;http://3e8.org/zb/eggs/lexing.txt&lt;/a&gt;&lt;br /&gt;
  "Notes on Scheme lexers and parsers"&lt;br /&gt;
  - A text file of someone else's research on Scheme parsers.&lt;br /&gt;
    Talks about sllgen, essence, packrat.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.softpanorama.org/Algorithms/Compilers/recursive_descent_parsing.shtml"&gt;http://www.softpanorama.org/Algorithms/Compilers/recursive_descent_parsing.shtml&lt;/a&gt;&lt;br /&gt;
  - One of the many pages on recursive descent.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 19 Dec 2012 18:58:38 -0000</pubDate><guid>https://sourceforge.net6e7295f053efb8096226c5716f76b893feef1031</guid></item></channel></rss>