]> ocean-lang.org Git - ocean/commitdiff
indent_test: reduce stack usage for preceding NEWLINEs
authorNeilBrown <neil@brown.name>
Sun, 23 Jun 2019 03:51:46 +0000 (13:51 +1000)
committerNeilBrown <neil@brown.name>
Sun, 23 Jun 2019 03:51:46 +0000 (13:51 +1000)
In the cases where we allow preceding newlines (Statementlist Open Close)
we current use one parse-stack from for each newline.  While there are
unlikely to be many, this is inelegant.
Change the right-recursive form to use a left-recursive Newlines rule
that absorbs one or more NEWLINEs using at most 2 stack frames.

Signed-off-by: NeilBrown <neil@brown.name>
csrc/indent_test.mdc

index 7e4f95627a57096a6c1982a960330916a9171145..7b5fe5ccc5769281242cf53b4d98a0b54b4674bb 100644 (file)
@@ -138,8 +138,10 @@ with complete bracketing and indenting.
 Program -> Statementlist ${ print_statement($1, 0); }$
 
 $*statement
+       Newlines -> NEWLINE
+               | Newlines NEWLINE
        Statementlist ->  Statements ${ $0 = $<1; }$
-               | NEWLINE Statementlist ${ $0 = $<2; }$
+               | Newlines Statements ${ $0 = $<2; }$
 
        Statements -> Statements Statement ${
                                {
@@ -155,9 +157,9 @@ $*statement
                        | ERROR ${ printf("statement ERROR\n"); $0 = NULL; }$
 
        Open -> {
-               | NEWLINE Open
+               | Newlines {
        Close -> }
-               | NEWLINE Close
+               | Newlines }
        Block -> Open Statementlist Close ${ $0 = $<2; }$
                | Open SimpleStatements } ${ $0 = $<2; }$
                | : SimpleStatements ${ $0 = $<2; }$