fela

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit f52ea1d2c118fdfd0306d38f610bb79cb9d4f66b
parent 4cf50d04a1684887be767daceeb06c18e9814a2b
Author: thing1 <l.standen@posteo.com>
Date:   Sun, 26 Oct 2025 12:50:32 +0000

fixed the parsers s/r conflicts
the parser outputs lists backwards, this needs to be reversed later

Diffstat:
Mfela.y | 34++++++++++++++++++++++------------
Mtest.fe | 6++----
2 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/fela.y b/fela.y @@ -37,6 +37,7 @@ struct ast_decs *body; %type <dec> dec %type <decs> decs %type <s> name +%type <s> type %left '+' '-' @@ -46,33 +47,34 @@ struct ast_decs *body; %% -body : decs {body = $1;} +body : decs { body = $1; } ; -decs : dec ';' { - $$ = alloczt(struct ast_decs); - $$->dec = $1; +decs : decs dec ';' { + $$ = alloczt(struct ast_decs); + $$->decs = $1; + $$->dec = $2; + } - | dec ';' decs { + | dec ';' { $$ = alloczt(struct ast_decs); - $$->decs = $3; $$->dec = $1; } ; -dec : name name { +dec : type name { $$ = alloczt(struct ast_dec); $$->name = $2; $$->type = $1; } - | name name '=' expr { + | type name '=' expr { $$ = alloczt(struct ast_dec); $$->name = $2; $$->value = $4; $$->type = $1; } - | name name '=' func { + | type name '=' func { $$ = alloczt(struct ast_dec); $$->name = $2; $$->value = $4; @@ -81,10 +83,10 @@ dec : name name { ; -exprs : expr ';' exprs { +exprs : exprs expr ';' { $$ = alloczt(struct ast_exprs); - $$->exprs = $3; - $$->expr = $1; + $$->exprs = $1; + $$->expr = $2; } | expr ';' { $$ = alloczt(struct ast_exprs); @@ -165,8 +167,16 @@ expr : name '=' expr { ; name : NAME { + $$ = strslice($1, yyleng); } + ; + +type : NAME { + + $$ = strslice($1, yyleng); + } + ; %% int diff --git a/test.fe b/test.fe @@ -1,5 +1,3 @@ -byte foo = func() { - int bar = 10; - bar = 20; -}; +byte foo = 20; +int bar = 10;