]> ocean-lang.org Git - ocean/blobdiff - csrc/indent_test.mdc
oceani: simplify test in var_block_close.
[ocean] / csrc / indent_test.mdc
index 6ba2479e58ecbd449811c6a355295cb4b7b629a8..5fbd8eb414c18a2375ce184af3263d09c95838a0 100644 (file)
@@ -4,35 +4,30 @@ simple assignments with expressions, and then prints out the same
 with complete bracketing and indenting.
 
 # File: indent_test.mk
-       myCFLAGS := -Wall -g -fplan9-extensions
-       CFLAGS := $(filter-out $(myCFLAGS),$(CFLAGS)) $(myCFLAGS)
-       myLDLIBS:= libparser.o libscanner.o libmdcode.o -licuuc
-       LDLIBS := $(filter-out $(myLDLIBS),$(LDLIBS)) $(myLDLIBS)
+       itestCFLAGS := -Wall -g -fplan9-extensions
+       itestLDLIBS:= libparser.o libscanner.o libmdcode.o -licuuc
 
        all :: itest
-       itest.c itest.h : indent_test.mdc parsergen libparser.o libscanner.o libmdcode.o
+       itest.c itest.h : indent_test.mdc parsergen
                ./parsergen -o itest --LALR --tag indent indent_test.mdc
-       indent_test.mk: indent_test.mdc md2c
+       indent_test.mk itest.code: indent_test.mdc md2c
                ./md2c indent_test.mdc
-       itest: itest.c
+       itest: itest.c | $(filter %.o,$(itestLDLIBS))
+               $(CC) $(itestCFLAGS) $^ $(itestLDLIBS) -o $@
 
        doitest: itest itest.code
                ./itest itest.code
        checkitest: itest itest.code
                @grep -v '^#' itest.out > .tmp.out
-               @./itest itest.code | diff -u - .tmp.out || echo itest FAILED
+               @./itest itest.code | diff -u .tmp.out - || echo itest FAILED
                @sed -e 'i\
                ' itest.code > itest2.code
-               @./itest itest2.code| diff -u - .tmp.out || echo itest2 FAILED
+               @./itest itest2.code| diff -u .tmp.out - || echo itest2 FAILED
        demos :: doitest
        tests :: checkitest
 
 # indent: header
 
- ./parsergen -o itest --LALR indent_test.cgm
- cc -o itest itest.c lib*.o -licuuc -lgmp
- ./itest itest.code
-
        struct expression {
                struct text op;
                struct expression *left, *right;
@@ -115,8 +110,6 @@ with complete bracketing and indenting.
                char *file = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0);
                struct section *s = code_extract(file, file+len, NULL);
                struct token_config config = {
-                       .ignored = (1 << TK_line_comment)
-                                | (1 << TK_block_comment),
                        .number_chars = ".,_+-",
                        .word_start = "",
                        .word_cont = "",
@@ -135,47 +128,47 @@ with complete bracketing and indenting.
 
 ~~~~~~
 
-Program -> Statementlist ${ print_statement($1, 0); }$
+$TERM if { } : * + - / ; =
+
+Program -> OptNL Statementlist ${ print_statement($S, 0); }$
+
+OptNL ->
+       | OptNL NEWLINE
+Newlines -> NEWLINE
+       | Newlines NEWLINE
 
 $*statement
-       Statementlist ->  Statements ${ $0 = $<1; }$
-               | NEWLINE Statementlist ${ $0 = $<2; }$
-
-       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 -> {
-               | NEWLINE Open
-       Close -> }
-               | NEWLINE Close
-       Block -> Open Statementlist Close ${ $0 = $<2; }$
-               | Open SimpleStatements } ${ $0 = $<2; }$
-               | : SimpleStatements $$NEWLINE ${ $0 = $<2; }$
-               | : StatementBlock ${ $0 = $<2; }$
-       StatementBlock -> Statementlist $$NEWLINE ${ $0 = $<1; }$
+
+       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 ${
                        {
                                struct statement **s;
-                               $0 = $<1;
+                               $0 = $<SSs;
                                s = &$0;
                                while (*s)
                                        s = &(*s)->next;
-                               *s = $<3;
+                               *s = $<SS;
                        }
                        }$
                | SimpleStatement ${ $0 = $<1; }$
-               | SimpleStatements ; ${ $0 = $<1; }$
 
        SimpleStatement -> Factor = Expression ${
                        $0 = calloc(1, sizeof(struct statement));
@@ -184,33 +177,45 @@ $*statement
                        $0->expr->op = $2.txt;
                        $0->expr->right = $<3;
                        }$
-       SSline -> SimpleStatements NEWLINE ${ $0 = $<1; }$
-               | SSline NEWLINE ${ $0 = $<1; }$
-       Statement -> SSline ${ $0 = $<1; }$
-               | IfStatement ${ $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; }$
-       IfTail -> else Block ${ $0 = $<2; }$
-               | IfTail NEWLINE ${ $0 = $<1; }$
-
-       IfStatement -> IfHead $$else ${ $0 = $<1; }$
-               | IfHead IfTail ${
-                       $0 = $<1;
-                       $0->elsepart = $<2;
-                       }$
-               | IfHead else IfStatement ${
-                       $0 = $<1;
-                       $0->elsepart = $<3;
-                       }$
-               | IfStatement NEWLINE ${ $0 = $<1; }$
 
+       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 ${
@@ -267,11 +272,27 @@ $*expression
         else if cond2:
                there1 =x
                there1a=x
+       if cond + cond2 :
+               hello = x;
+               hello2 = x;
+
+               sum = val +
+                val;
+
+               if condX:
+                foo = x *
+                    x +
+                    y
+                    / two;
+       else if cond2:
+               there1 =x
+               there1a=x
        there2=x
        there3=x;
        all = y;
        if true {yes=x;} else : no=x
        if true: yes = no; no = yes;
+       if false: yes=ok; else: no=ok
 
        if false {
                print = OK
@@ -282,6 +303,8 @@ $*expression
        if a:
                if b:
                        c= d
+               else:
+                       f=g
        x = y
 
 # File: itest.out
@@ -289,6 +312,16 @@ $*expression
        (mister=no);
        (there=x);
        (all=y);
+       if (cond+cond2):
+           (hello=x);
+           (hello2=x);
+           (sum=(val+val));
+           if condX:
+               (foo=((x*x)+(y/two)));
+       else:
+           if cond2:
+               (there1=x);
+               (there1a=x);
        if (cond+cond2):
            (hello=x);
            (hello2=x);
@@ -309,6 +342,10 @@ $*expression
        if true:
            (yes=no);
            (no=yes);
+       if false:
+           (yes=ok);
+       else:
+           (no=ok);
        if false:
            (print=OK);
        else:
@@ -316,4 +353,6 @@ $*expression
        if a:
            if b:
                (c=d);
+           else:
+               (f=g);
        (x=y);