full program basic parsing

This commit is contained in:
me 2025-12-17 00:02:54 +02:00
parent 4738ad92bf
commit 5c2c9a4600
4 changed files with 223 additions and 4 deletions

View file

@ -28,7 +28,7 @@ let draw = fn(frame, state) {
};
let migrate = fn(state) {
return { player: { pos: state.player.position } },
return { player: { pos: state.player.position } };
};
```

View file

@ -399,7 +399,7 @@ let draw = fn(frame, state) {
};
let migrate = fn(state) {
return { player: { pos: state.player.position } },
return { player: { pos: state.player.position } };
};
"
.to_string();

View file

@ -0,0 +1,217 @@
---
source: src/parser/parser.rs
expression: result
---
Ok(
[
Definition {
name: Name(
"init",
),
expr: Func(
Fn {
args: [],
body: Block(
[
Return(
Some(
Value(
Record(
Record(
{
Label(
"player",
): Value(
Record(
Record(
{
Label(
"position",
): Value(
Record(
Record(
{
Label(
"x",
): Value(
Int(
10,
),
),
Label(
"y",
): Value(
Int(
20,
),
),
},
),
),
),
},
),
),
),
},
),
),
),
),
),
],
),
},
),
},
Definition {
name: Name(
"update",
),
expr: Func(
Fn {
args: [
Arg {
name: Name(
"state",
),
},
Arg {
name: Name(
"events",
),
},
],
body: Block(
[
Return(
Some(
Var(
Name(
"state2",
),
),
),
),
],
),
},
),
},
Definition {
name: Name(
"draw",
),
expr: Func(
Fn {
args: [
Arg {
name: Name(
"frame",
),
},
Arg {
name: Name(
"state",
),
},
],
body: Block(
[
Expr(
FunCall {
func: Access {
expr: Var(
Name(
"frame",
),
),
field: Label(
"clear",
),
},
args: [
Value(
Int(
0,
),
),
Value(
Int(
0,
),
),
Value(
Int(
0,
),
),
],
},
),
],
),
},
),
},
Definition {
name: Name(
"migrate",
),
expr: Func(
Fn {
args: [
Arg {
name: Name(
"state",
),
},
],
body: Block(
[
Return(
Some(
Value(
Record(
Record(
{
Label(
"player",
): Value(
Record(
Record(
{
Label(
"pos",
): Access {
expr: Access {
expr: Var(
Name(
"state",
),
),
field: Label(
"player",
),
},
field: Label(
"position",
),
},
},
),
),
),
},
),
),
),
),
),
],
),
},
),
},
],
)

View file

@ -33,6 +33,7 @@ pub struct Tokens(pub Vec<LocatedToken>);
impl From<Vec<LocatedToken>> for Tokens {
fn from(mut tokens: Vec<LocatedToken>) -> Tokens {
// println!("{tokens:#?}");
tokens.reverse();
Tokens(tokens)
}
@ -60,14 +61,15 @@ impl Tokens {
if let Some(_end) = self.next_if(end) {
Ok(Some(result))
} else {
// println!("{:#?}", self);
Err(Error::UnexpectedTokenForParser(
"between".into(),
format!("between end {start:#?} and {end:#?}"),
self.next(),
))
}
} else {
Err(Error::UnexpectedTokenForParser(
"between".into(),
"between parser".into(),
self.next(),
))
}