]> git.bts.cx Git - sun.git/blobdiff - runtime/src/sun/compiler/sun.y
Groundwork for arrays
[sun.git] / runtime / src / sun / compiler / sun.y
index b71f4de442f7da6a17e8c808f04a6a2ab6897349..c6acef02f8f26698ea6264978ff38a3c9a71f5d0 100644 (file)
 %%
 
 module
 %%
 
 module
-       : optional_statements_or_definitions {
+       : optional_statements {
                $$ = sltNodeMakeModule($1);
                *moduleOut = $$;
        }
        ;
 
                $$ = sltNodeMakeModule($1);
                *moduleOut = $$;
        }
        ;
 
-optional_statements_or_definitions
-       : /* Nothing */ {
+/*optional_statements_or_definitions
+       : *//* Nothing *//* {
                $$ = NULL;
        }
        | statements_or_definitions
        ;
 
 statements_or_definitions
                $$ = NULL;
        }
        | statements_or_definitions
        ;
 
 statements_or_definitions
-       : definition {
+       : function_definition {
                $$ = sltNodeMakeSequence(NULL, $1);
        }
        | statement {
                $$ = sltNodeMakeSequence(NULL, $1);
        }
                $$ = sltNodeMakeSequence(NULL, $1);
        }
        | statement {
                $$ = sltNodeMakeSequence(NULL, $1);
        }
-       | statements_or_definitions definition {
+       | statements_or_definitions function_definition {
                $$ = sltNodeMakeSequence($1, $2);
        }
        | statements_or_definitions statement {
                $$ = sltNodeMakeSequence($1, $2);
        }
                $$ = sltNodeMakeSequence($1, $2);
        }
        | statements_or_definitions statement {
                $$ = sltNodeMakeSequence($1, $2);
        }
-       ;
+       ;*/
 
 
-definition
+/*definition
        : function_definition
        : function_definition
-       /*| type_definition*/
+       | type_definition
        | variable_definition ';'
        | variable_definition ';'
-       ;
+       ;*/
 
 function_definition
 
 function_definition
-       : IDENTIFIER IDENTIFIER '(' optional_parameter_definitions ')' '{' optional_statements '}' {
+       : type IDENTIFIER '(' optional_parameter_definitions ')' '{' optional_statements '}' {
                $$ = sltNodeMakeFunctionDefinition($1, $2, $4, $7);
        }
        ;
                $$ = sltNodeMakeFunctionDefinition($1, $2, $4, $7);
        }
        ;
@@ -136,7 +136,7 @@ parameter_definitions
        ;
 
 parameter_definition
        ;
 
 parameter_definition
-       : IDENTIFIER IDENTIFIER {
+       : type IDENTIFIER {
                $$ = sltNodeMakeFunctionParameterDefinition($1, $2);
        }
        ;
                $$ = sltNodeMakeFunctionParameterDefinition($1, $2);
        }
        ;
@@ -163,14 +163,23 @@ type_member_definition
        ;*/
 
 variable_definition
        ;*/
 
 variable_definition
-       : IDENTIFIER IDENTIFIER {
+       : type IDENTIFIER {
                $$ = sltNodeMakeVariableDefinition($1, $2, NULL);
        }
                $$ = sltNodeMakeVariableDefinition($1, $2, NULL);
        }
-       | IDENTIFIER IDENTIFIER '=' expression {
+       | type IDENTIFIER '=' expression {
                $$ = sltNodeMakeVariableDefinition($1, $2, $4);
        }
        ;
 
                $$ = sltNodeMakeVariableDefinition($1, $2, $4);
        }
        ;
 
+type
+       : IDENTIFIER {
+               $$ = $1;//sltNodeMakeTypeDefinition($1, 1);
+       }
+       | '[' type ':' INT ']' {
+               $$ = $2;//sltNodeMakeTypeDefinition($1, $2);
+       }
+       ;
+
 optional_statements
        : /* nothing */ {
                $$ = NULL;
 optional_statements
        : /* nothing */ {
                $$ = NULL;
@@ -198,6 +207,7 @@ statement
        : ';' {
                $$ = NULL; /* Otherwise this will pass up the ';' character */
        }
        : ';' {
                $$ = NULL; /* Otherwise this will pass up the ';' character */
        }
+       | function_definition
        | variable_definition ';'
        | "return" optional_expression ';' {
                $$ = sltNodeMakeReturn($2);
        | variable_definition ';'
        | "return" optional_expression ';' {
                $$ = sltNodeMakeReturn($2);
@@ -413,7 +423,7 @@ postfix_expression
                $$ = sltNodeMakeFunctionCall($1, $3);
        }
        | postfix_expression '.' IDENTIFIER {
                $$ = sltNodeMakeFunctionCall($1, $3);
        }
        | postfix_expression '.' IDENTIFIER {
-               $$ = sltNodeMakeTypeAccess($1, $3);
+               $$ = sltNodeMakeMemberAccess($1, $3);
        }
        /*| postfix_expression postfix_unary_operator {
                $$ = sltNodeMakeUnaryOperation($1, $2);
        }
        /*| postfix_expression postfix_unary_operator {
                $$ = sltNodeMakeUnaryOperation($1, $2);