]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani.mdc
scanner: change the meaning of ignoring comment tokens.
[ocean] / csrc / oceani.mdc
index 4f00438c08bf3d844377e89da5cd2f8d4ef79696..ab6abe91f67156e03a0e81926897d320e652b04a 100644 (file)
@@ -171,9 +171,7 @@ structures can be used.
                char *section = NULL;
                struct parse_context context = {
                        .config = {
-                               .ignored = (1 << TK_line_comment)
-                                        | (1 << TK_block_comment)
-                                        | (1 << TK_mark),
+                               .ignored = (1 << TK_mark),
                                .number_chars = ".,_+- ",
                                .word_start = "_",
                                .word_cont = "_",
@@ -633,8 +631,8 @@ there are errors.
 
 ###### includes
        #include <gmp.h>
-       #include "string.h"
-       #include "number.h"
+       #include "parse_string.h"
+       #include "parse_number.h"
 
 ###### libs
        myLDLIBS := libnumber.o libstring.o -lgmp
@@ -2019,23 +2017,32 @@ function will be needed.
                                f = f->prev;
                        }
                } }$
+               | DeclareStruct NEWLINE
 
        $void
+       Newlines -> NEWLINE
+               | Newlines NEWLINE
        Open -> {
-               | NEWLINE Open
+               | Newlines {
        Close -> }
-               | NEWLINE Close
+               | Newlines }
        $*fieldlist
-       FieldBlock -> Open FieldList Close ${ $0 = $<2; }$
+       FieldBlock -> Open FieldList } ${ $0 = $<2; }$
                | Open SimpleFieldList } ${ $0 = $<2; }$
-               | : FieldList  ${ $0 = $<2; }$
+               | : FieldList $$NEWLINE ${ $0 = $<2; }$
 
-       FieldList -> SimpleFieldList NEWLINE ${ $0 = $<1; }$
-               | FieldList SimpleFieldList NEWLINE ${
+       FieldList -> FieldLines ${ $0 = $<1; }$
+               | Newlines FieldLines ${ $0 = $<2; }$
+       FieldLines -> SimpleFieldListLine ${ $0 = $<1; }$
+               | FieldLines SimpleFieldListLine ${
                        $2->prev = $<1;
                        $0 = $<2;
                }$
 
+       SimpleFieldListLine -> SimpleFieldList NEWLINE ${ $0 = $<1; }$
+               | SimpleFieldListLine NEWLINE ${ $0 = $<1; }$
+               | ERROR NEWLINE ${ tok_err(c, "Syntax error in struct field", &$1); }$
+
        SimpleFieldList -> Field ${ $0 = $<1; }$
                | SimpleFieldList ; Field ${
                        $3->prev = $<1;
@@ -2067,7 +2074,6 @@ function will be needed.
                        $0->f.type = $<3;
                        $0->f.init = val_init($3);
                }$
-               | ERROR ${ tok_err(c, "Syntax error in struct field", &$1); }$
 
 ###### forward decls
        static void structure_print_type(struct type *t, FILE *f);
@@ -3051,11 +3057,11 @@ is in-place.
        $*binode
        Block -> Open Statementlist Close ${ $0 = $<2; }$
                | Open SimpleStatements } ${ $0 = reorder_bilist($<2); }$
-               | : SimpleStatements $$NEWLINE ${ $0 = reorder_bilist($<2); }$
-               | : Statementlist $$NEWLINE ${ $0 = $<2; }$
+               | : SimpleStatements ${ $0 = reorder_bilist($<2); }$
+               | : Statementlist $$OUT ${ $0 = $<2; }$
 
        Statementlist -> ComplexStatements ${ $0 = reorder_bilist($<1); }$
-               | NEWLINE Statementlist ${ $0 = $<2; }$
+               | Newlines ComplexStatements ${ $0 = reorder_bilist($<2); }$
 
        ComplexStatements -> ComplexStatements ComplexStatement ${
                        if ($2 == NULL) {
@@ -3098,9 +3104,9 @@ is in-place.
                        $0->left = NULL;
                        $0->right = $<1;
                        }$
-               | SimpleStatements ; ${ $0 = $<1; }$
 
        SimpleStatementLine -> SimpleStatements NEWLINE ${ $0 = $<1; }$
+               | SimpleStatements ; NEWLINE ${ $0 = $<1; }$
                | SimpleStatementLine NEWLINE ${ $0 = $<1; }$
 
        SimpleStatement -> pass ${ $0 = NULL; }$
@@ -3557,7 +3563,7 @@ defined.
        case Xcond_statement: free_cond_statement(cast(cond_statement, e)); break;
 
 ###### ComplexStatement Grammar
-       | CondStatement ${ $0 = $<1; }$
+       | CondStatement $$NEWLINE ${ $0 = $<1; }$
 
 ###### Grammar
 
@@ -3628,6 +3634,11 @@ defined.
                        $0->elsepart = $<3;
                        var_block_close(c, CloseElse);
                }$
+               | else OpenScope SimpleStatements NEWLINE ${
+                       $0 = new(cond_statement);
+                       $0->elsepart = reorder_bilist($<3);
+                       var_block_close(c, CloseElse);
+               }$
                | else OpenScope CondStatement ${
                        $0 = new(cond_statement);
                        $0->elsepart = $<3;
@@ -3636,7 +3647,10 @@ defined.
 
        $*exec
        // These scopes are closed in CondSuffix
-       ForPart -> for OpenScope SimpleStatements ${
+       ForPart -> for OpenScope SimpleStatements ; ${
+                       $0 = reorder_bilist($<3);
+               }$
+               | for OpenScope SimpleStatements NEWLINE ${
                        $0 = reorder_bilist($<3);
                }$
                |  for OpenScope Block ${
@@ -3644,7 +3658,11 @@ defined.
                }$
                |  ForPart NEWLINE ${ $0 = $<1; }$
 
-       ThenPart -> then OpenScope SimpleStatements ${
+       ThenPart -> then OpenScope SimpleStatements ; ${
+                       $0 = reorder_bilist($<3);
+                       var_block_close(c, CloseSequential);
+               }$
+               | then OpenScope SimpleStatements NEWLINE ${
                        $0 = reorder_bilist($<3);
                        var_block_close(c, CloseSequential);
                }$
@@ -3678,6 +3696,24 @@ defined.
                        $0.thenpart = $<5;
                        var_block_close(c, CloseParallel);
                }$
+               | if OpenScope Expression OpenScope then Block ${
+                       $0.type = Xcond_statement;
+                       $0.condpart = $<3;
+                       $0.thenpart = $<6;
+                       var_block_close(c, CloseParallel);
+               }$
+               | if OpenScope Expression OpenScope then SimpleStatements ; ${
+                       $0.type = Xcond_statement;
+                       $0.condpart = $<3;
+                       $0.thenpart = reorder_bilist($<6);
+                       var_block_close(c, CloseParallel);
+               }$
+               | if OpenScope Expression OpenScope then SimpleStatements NEWLINE ${
+                       $0.type = Xcond_statement;
+                       $0.condpart = $<3;
+                       $0.thenpart = reorder_bilist($<6);
+                       var_block_close(c, CloseParallel);
+               }$
                | if OpenScope Block then OpenScope Block ${
                        $0.type = Xcond_statement;
                        $0.condpart = $<3;
@@ -3932,14 +3968,15 @@ various declarations in the parse context.
 
        $void
        Ocean -> DeclarationList
+               | Newlines DeclarationList
 
        DeclarationList -> Declaration
                | DeclarationList Declaration
 
-       Declaration -> DeclareConstant
+       Declaration -> Declaration NEWLINE
+               | DeclareConstant
                | DeclareProgram
                | DeclareStruct
-               | NEWLINE
                | ERROR NEWLINE ${
                        tok_err(c,
                                "error: unhandled parse error", &$1);
@@ -3974,17 +4011,19 @@ searching through for the Nth constant for decreasing N.
 
        DeclareConstant -> const Open ConstList Close
                | const Open SimpleConstList }
-               | const : ConstList
+               | const : ConstList $$NEWLINE
                | const SimpleConstList NEWLINE
 
-       ConstList -> ComplexConsts
-               | NEWLINE ConstList
-       ComplexConsts -> ComplexConst ComplexConsts
-               | ComplexConst
-       ComplexConst -> SimpleConstList NEWLINE
+       ConstList -> ConstLines
+               | Newlines ConstLines
+       ConstLines -> ConstLines SimpleConstLine
+               | SimpleConstLine
        SimpleConstList -> SimpleConstList ; Const
                | Const
                | SimpleConstList ;
+       SimpleConstLine -> SimpleConstList NEWLINE
+               | SimpleConstLine NEWLINE
+               | ERROR NEWLINE ${ tok_err(c, "Syntax error in constant", &$1); }$
 
        $*type
        CType -> Type   ${ $0 = $<1; }$
@@ -4017,7 +4056,6 @@ searching through for the Nth constant for decreasing N.
                        v->val = interp_exec($5);
                }
        } }$
-       | ERROR NEWLINE ${ tok_err(c, "Syntax error in constant", &$1); }$
 
 ###### print const decls
        {
@@ -4316,6 +4354,8 @@ things which will likely grow as the languages grows.
                        print "", list[i],
                print
 
+               if 1 == 2 then print "yes"; else print "no"
+
                bob:fred
                bob.name = "Hello"
                bob.alive = (bob.name == "Hello")