Hmm....

> t_expr :: Parsec Object
> t_expr =
>  (do comment_eol
>      t_expr1 <- t_expr
>      return t_expr1)
>  <|>
>  (do (tINITIAL_INDENT_NO_BANG <|> many1 hspace)
>      (n_expr
>        <|> do comment_eol
>               t_expr2 <- t_expr
>               return t_expr2))
>  <|>
>  (do tINITIAL_INDENT_WITH_BANG
>      fail "cannot start with a bang!")
>  <|>
>  (do eof
>      return $ generate_eof)
>  <|>
>  i_expr

Looks fine!

On 1/10/13, David A. Wheeler <dwhee...@dwheeler.com> wrote:
> The file "sweet.g" in the development branch is coming together as a
> reasonable BNF for sweet-expressions.
>
> I intend to post 1-2 productions at a time, for review and comment.  Here's
> the first one, the top-level production that defines sweet-expressions.
> This production handles special cases (initial indents, blank lines that
> precede the sweet-expression, etc.), then calls the production i_expr
> ("indented expression") for normal cases.
>
> Comments?
>
> Feel free to look at the whole file, sweet.g in the develop branch, which
> defines some of the terminals and non-terminals, such as:
> * comment_eol: End-of-line, optionally preceded by a ";..." comment.
> * INITIAL_INDENT_NO_BANG: An initial indent without "!"
> * n_expr: Neoteric-expression
>
> For EOF handling, for now I'm assuming that the system will insert an extra
> EOL at the end of a non-empty file if there isn't one already.
>
>  --- David A. Wheeler
>
> =============================
>
> // Top-level sweet-expression production, t_expr.
> // This production handles special cases, then in the normal case
> // drops to the i_expr production.
>
> // The rule for "indent processing disabled on initial top-level hspace"
> // is a very simple (and clever) BNF construction by Alan Manuel K. Gloria.
> // If there is an indent it simply reads a single n-expression and returns.
> // If there is more than one on an initially-indented line, the later
> // horizontal space will not have have been read, so this production will
> // fire again on the next invocation, doing the right thing.
>
> // Although "!" is an indent character, it's an error to use it at the
> // topmost level.  The only reason to indent at the top is to disable
> // indent processing, for backwards compatibility.  Detecting this as
> // an error should detect some mistakes.
>
> t_expr returns [Object v]
>   : comment_eol t_expr1=t_expr {$v=$t_expr1.v;} /* Initial lcomment, retry
> */
>   | (INITIAL_INDENT_NO_BANG | hspace+ )
>     (n_expr {$v = $n_expr.v;} /* indent processing disabled */
>      | comment_eol t_expr2=t_expr {$v=$t_expr2.v;} )
>   | INITIAL_INDENT_WITH_BANG error
>   | EOF {generate_eof();} /* End of file */
>   | i_expr {$v = $i_expr.v;} /* Normal case */ ;
>
>
> ------------------------------------------------------------------------------
> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
> MVPs and experts. ON SALE this month only -- learn more at:
> http://p.sf.net/sfu/learnmore_122712
> _______________________________________________
> Readable-discuss mailing list
> Readable-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/readable-discuss
>

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 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_122412
_______________________________________________
Readable-discuss mailing list
Readable-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/readable-discuss

Reply via email to