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:
| M | fela.y | | | 34 | ++++++++++++++++++++++------------ |
| M | test.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;