Ast binding refactoring

This commit is contained in:
Michael Schimmel
2025-10-06 20:07:19 +02:00
parent 0edb9b800b
commit 039a7c4b3e
2 changed files with 192 additions and 44 deletions
+116
View File
@@ -199,5 +199,121 @@
]
}
}
},
"factorial": {
"NodeType": "LambdaExpr",
"Parameters": [
{
"NodeType": "Identifier",
"Name": "n"
}
],
"Body": {
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "LambdaExpr",
"Parameters": [
{
"NodeType": "Identifier",
"Name": "n"
},
{
"NodeType": "Identifier",
"Name": "acc"
}
],
"Body": {
"NodeType": "TernaryExpr",
"Condition": {
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "<="
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "n"
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 1
}
}
}
]
},
"ThenBranch": {
"NodeType": "Identifier",
"Name": "acc"
},
"ElseBranch": {
"NodeType": "Recur",
"Arguments": [
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "-"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "n"
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 1
}
}
}
]
},
{
"NodeType": "FunctionCall",
"Callee": {
"NodeType": "Identifier",
"Name": "*"
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "acc"
},
{
"NodeType": "Identifier",
"Name": "n"
}
]
}
]
}
}
},
"Arguments": [
{
"NodeType": "Identifier",
"Name": "n"
},
{
"NodeType": "Constant",
"Value": {
"Kind": "Scalar",
"Value": {
"Kind": "Ordinal",
"Value": 1
}
}
}
]
}
}
}