]> ocean-lang.org Git - ocean/commitdiff
Update indent_test grammer to align with new approach
authorNeilBrown <neil@brown.name>
Wed, 10 Mar 2021 01:13:05 +0000 (12:13 +1100)
committerNeilBrown <neil@brown.name>
Wed, 10 Mar 2021 01:13:05 +0000 (12:13 +1100)
Indents are now now handled very differently.  Update itest
grammar to match.

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

index 463428b7579b1cf32d29ecafdeb43d42a832146d..5fbd8eb414c18a2375ce184af3263d09c95838a0 100644 (file)
@@ -130,36 +130,33 @@ with complete bracketing and indenting.
 
 $TERM if { } : * + - / ; =
 
-Program -> Statementlist ${ print_statement($1, 0); }$
+Program -> OptNL Statementlist ${ print_statement($S, 0); }$
+
+OptNL ->
+       | OptNL NEWLINE
+Newlines -> NEWLINE
+       | Newlines NEWLINE
 
 $*statement
-       Newlines -> NEWLINE
-               | Newlines NEWLINE
-       Statementlist ->  Statements ${ $0 = $<S; }$
-               | Newlines Statements ${ $0 = $<S1; }$
-
-       Statements -> Statements Statement ${
-                               {
-                                       struct statement **s;
-                                       $0 = $<1;
-                                       s = &$0;
-                                       while (*s)
-                                               s = &(*s)->next;
-                                       *s = $<2;
-                               }
-                               }$
-                       | Statement ${ $0 = $<1; }$
-                       | ERROR ${ printf("statement ERROR\n"); $0 = NULL; }$
-
-       Open -> {
-               | Newlines {
-       Close -> }
-               | Newlines }
-       Block -> Open Statementlist Close ${ $0 = $<S; }$
-               | Open SimpleStatements } ${ $0 = $<S; }$
-               | : SimpleStatements ${ $0 = $<SS; }$
-               | : StatementBlock ${ $0 = $<SB; }$
-       StatementBlock -> Statementlist ${ $0 = $<Sl; }$
+
+       Statementlist -> Statementlist Statement ${
+               {
+                       struct statement **s;
+                       $0 = $<1;
+                       s = &$0;
+                       while (*s)
+                               s = &(*s)->next;
+                       *s = $<2;
+               }
+               }$
+               | Statement ${ $0 = $<1; }$
+
+       Block -> { IN OptNL Statementlist OUT OptNL } ${ $0 = $<Stat; }$
+               | { SimpleStatements } ${ $0 = $<S; }$
+               | { SimpleStatements ; } ${ $0 = $<S; }$
+               | : IN OptNL Statementlist OUT ${ $0 = $<Sl; }$
+               | : SimpleStatements EOL ${ $0 = $<Si; }$
+               | : SimpleStatements ; ${ $0 = $<Si; }$
 
        SimpleStatements -> SimpleStatements ; SimpleStatement ${
                        {
@@ -172,7 +169,6 @@ $*statement
                        }
                        }$
                | SimpleStatement ${ $0 = $<1; }$
-               | SimpleStatements ; ${ $0 = $<1; }$
 
        SimpleStatement -> Factor = Expression ${
                        $0 = calloc(1, sizeof(struct statement));
@@ -181,29 +177,45 @@ $*statement
                        $0->expr->op = $2.txt;
                        $0->expr->right = $<3;
                        }$
-       SSline -> SimpleStatements NEWLINE ${ $0 = $<1; }$
-       Statement -> SSline ${ $0 = $<1; }$
-               | IfStatement ${ $0 = $<1; }$
-               | Statement NEWLINE ${ $0 = $<1; }$
+       Statement -> SimpleStatements Newlines ${ $0 = $<SS; }$
+               | SimpleStatements ; Newlines ${ $0 = $<SS; }$
+               | IfHead Newlines ${ $0 = $<If; }$
+               | IfHead Newlines IfSuffix ${
+                       $0 = $<IH;
+                       $0->next = $IS->next;
+                       $IS->next = NULL;
+                       $0->elsepart = $<IS;
+               }$
+               | IfHead IfSuffix ${
+                       $0 = $<IH;
+                       $0->next = $IS->next;
+                       $IS->next = NULL;
+                       $0->elsepart = $<IS;
+               }$
+               | ERROR Newlines ${ printf("statement ERROR\n"); $0 = NULL; }$
 
        $RIGHT else
 
        IfHead -> if Expression Block ${
                                $0 = calloc(1, sizeof(struct statement));
-                               $0->expr = $<2;
-                               $0->thenpart = $<3;
+                               $0->expr = $<Ex;
+                               $0->thenpart = $<Bl;
                                }$
-               | IfHead NEWLINE ${ $0 = $<1; }$
 
-       IfStatement -> IfHead $$else ${ $0 = $<1; }$
-               | IfHead else Block ${
-                       $0 = $<1;
-                       $0->elsepart = $<3;
-                       }$
-               | IfHead else IfStatement ${
-                       $0 = $<1;
-                       $0->elsepart = $<3;
-                       }$
+       IfSuffix -> else Block Newlines ${ $0 = $<Bl; }$
+               | else IfHead Newlines ${ $0 = $<IH; }$
+               | else IfHead IfSuffix ${
+                       $0 = $<IH;
+                       $0->elsepart = $IS;
+                       $0->next = $IS->next;
+                       $IS->next = NULL;
+               }$
+               | else IfHead Newlines IfSuffix ${
+                       $0 = $<IH;
+                       $0->elsepart = $IS;
+                       $0->next = $IS->next;
+                       $IS->next = NULL;
+               }$
 
 $*expression
        Expression -> Expression + Term ${