]> ocean-lang.org Git - ocean/commitdiff
oceani: modify grammar to not waste stack on newlines
authorNeilBrown <neil@brown.name>
Sun, 23 Jun 2019 04:29:13 +0000 (14:29 +1000)
committerNeilBrown <neil@brown.name>
Sun, 23 Jun 2019 04:29:13 +0000 (14:29 +1000)
Current grammar uses one stack frame per newline for leading
newlines as these productions are right-recursive.  This is
unnecessary and inelegant. Change to use a left-recursive Newlines
production.

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

index d234968144dc1b245dbd95cc12a0e60a283e40e5..06f71be3268da0b30eb962be214eab1c4d23f558 100644 (file)
@@ -2022,17 +2022,19 @@ function will be needed.
                | DeclareStruct NEWLINE
 
        $void
+       Newlines -> NEWLINE
+               | Newlines NEWLINE
        Open -> {
-               | NEWLINE Open
+               | Newlines {
        Close -> }
-               | NEWLINE Close
+               | Newlines }
        $*fieldlist
        FieldBlock -> Open FieldList } ${ $0 = $<2; }$
                | Open SimpleFieldList } ${ $0 = $<2; }$
                | : FieldList $$NEWLINE ${ $0 = $<2; }$
 
        FieldList -> FieldLines ${ $0 = $<1; }$
-               | NEWLINE FieldLines ${ $0 = $<2; }$
+               | Newlines FieldLines ${ $0 = $<2; }$
        FieldLines -> SimpleFieldListLine ${ $0 = $<1; }$
                | FieldLines SimpleFieldListLine ${
                        $2->prev = $<1;
@@ -3061,7 +3063,7 @@ is in-place.
                | : Statementlist $$NEWLINE ${ $0 = $<2; }$
 
        Statementlist -> ComplexStatements ${ $0 = reorder_bilist($<1); }$
-               | NEWLINE Statementlist ${ $0 = $<2; }$
+               | Newlines ComplexStatements ${ $0 = reorder_bilist($<2); }$
 
        ComplexStatements -> ComplexStatements ComplexStatement ${
                        if ($2 == NULL) {
@@ -3938,7 +3940,7 @@ various declarations in the parse context.
 
        $void
        Ocean -> DeclarationList
-               | NEWLINE Ocean
+               | Newlines DeclarationList
 
        DeclarationList -> Declaration
                | DeclarationList Declaration
@@ -3985,7 +3987,7 @@ searching through for the Nth constant for decreasing N.
                | const SimpleConstList NEWLINE
 
        ConstList -> ConstLines
-               | NEWLINE ConstList
+               | Newlines ConstLines
        ConstLines -> ConstLines SimpleConstLine
                | SimpleConstLine
        SimpleConstList -> SimpleConstList ; Const