X-Git-Url: https://git.bts.cx/sun.git/blobdiff_plain/c14e8cb22c12114bd78aae89e54ccd51ad522c50..refs/heads/mainline:/runtime/src/sun/compiler/sun.y?ds=sidebyside diff --git a/runtime/src/sun/compiler/sun.y b/runtime/src/sun/compiler/sun.y index b71f4de..c6acef0 100644 --- a/runtime/src/sun/compiler/sun.y +++ b/runtime/src/sun/compiler/sun.y @@ -79,42 +79,42 @@ %% module - : optional_statements_or_definitions { + : optional_statements { $$ = sltNodeMakeModule($1); *moduleOut = $$; } ; -optional_statements_or_definitions - : /* Nothing */ { +/*optional_statements_or_definitions + : *//* Nothing *//* { $$ = NULL; } | statements_or_definitions ; statements_or_definitions - : definition { + : function_definition { $$ = 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); } - ; + ;*/ -definition +/*definition : function_definition - /*| type_definition*/ + | type_definition | variable_definition ';' - ; + ;*/ function_definition - : IDENTIFIER IDENTIFIER '(' optional_parameter_definitions ')' '{' optional_statements '}' { + : type IDENTIFIER '(' optional_parameter_definitions ')' '{' optional_statements '}' { $$ = sltNodeMakeFunctionDefinition($1, $2, $4, $7); } ; @@ -136,7 +136,7 @@ parameter_definitions ; parameter_definition - : IDENTIFIER IDENTIFIER { + : type IDENTIFIER { $$ = sltNodeMakeFunctionParameterDefinition($1, $2); } ; @@ -163,14 +163,23 @@ type_member_definition ;*/ variable_definition - : IDENTIFIER IDENTIFIER { + : type IDENTIFIER { $$ = sltNodeMakeVariableDefinition($1, $2, NULL); } - | IDENTIFIER IDENTIFIER '=' expression { + | type IDENTIFIER '=' expression { $$ = sltNodeMakeVariableDefinition($1, $2, $4); } ; +type + : IDENTIFIER { + $$ = $1;//sltNodeMakeTypeDefinition($1, 1); + } + | '[' type ':' INT ']' { + $$ = $2;//sltNodeMakeTypeDefinition($1, $2); + } + ; + optional_statements : /* nothing */ { $$ = NULL; @@ -198,6 +207,7 @@ statement : ';' { $$ = NULL; /* Otherwise this will pass up the ';' character */ } + | function_definition | variable_definition ';' | "return" optional_expression ';' { $$ = sltNodeMakeReturn($2); @@ -413,7 +423,7 @@ postfix_expression $$ = sltNodeMakeFunctionCall($1, $3); } | postfix_expression '.' IDENTIFIER { - $$ = sltNodeMakeTypeAccess($1, $3); + $$ = sltNodeMakeMemberAccess($1, $3); } /*| postfix_expression postfix_unary_operator { $$ = sltNodeMakeUnaryOperation($1, $2);