Another one.

This commit is contained in:
2025-08-27 01:29:54 -04:00
parent 7cad33405e
commit 542d36f266
4 changed files with 4254 additions and 1008 deletions

390
src/grammar.json generated
View File

@@ -16,6 +16,10 @@
"type": "SYMBOL",
"name": "num"
},
{
"type": "SYMBOL",
"name": "bool"
},
{
"type": "SYMBOL",
"name": "word"
@@ -30,11 +34,11 @@
},
{
"type": "SYMBOL",
"name": "funcdef"
"name": "parexp"
},
{
"type": "SYMBOL",
"name": "lambda"
"name": "block"
},
{
"type": "SYMBOL",
@@ -42,7 +46,15 @@
},
{
"type": "SYMBOL",
"name": "parexp"
"name": "lambda"
},
{
"type": "SYMBOL",
"name": "funcdef"
},
{
"type": "SYMBOL",
"name": "ifexp"
}
]
},
@@ -50,102 +62,88 @@
"type": "PATTERN",
"value": "\\d+"
},
"bool": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "TRUE"
},
{
"type": "STRING",
"value": "T"
},
{
"type": "STRING",
"value": "FALSE"
},
{
"type": "STRING",
"value": "F"
}
]
},
"word": {
"type": "PATTERN",
"value": "[a-zA-Z_]\\w*"
},
"binexp": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_exp"
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "/"
},
{
"type": "STRING",
"value": "eq"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
}
]
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
}
]
]
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "/"
}
]
}
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
}
]
}
}
]
]
}
},
"callexp": {
"type": "PREC",
"value": 3,
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
@@ -201,9 +199,46 @@
]
}
},
"funcdef": {
"type": "PREC",
"value": 4,
"parexp": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_exp"
},
{
"type": "STRING",
"value": ")"
}
]
},
"block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"vardef": {
"type": "PREC_RIGHT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
@@ -216,16 +251,12 @@
}
},
{
"type": "FIELD",
"name": "params",
"content": {
"type": "SYMBOL",
"name": "params"
}
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "body",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_exp"
@@ -235,8 +266,8 @@
}
},
"lambda": {
"type": "PREC",
"value": 5,
"type": "PREC_RIGHT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
@@ -263,9 +294,9 @@
]
}
},
"vardef": {
"funcdef": {
"type": "PREC_RIGHT",
"value": 0,
"value": 3,
"content": {
"type": "SEQ",
"members": [
@@ -278,12 +309,16 @@
}
},
{
"type": "STRING",
"value": "="
"type": "FIELD",
"name": "params",
"content": {
"type": "SYMBOL",
"name": "params"
}
},
{
"type": "FIELD",
"name": "value",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_exp"
@@ -338,20 +373,145 @@
}
]
},
"parexp": {
"type": "SEQ",
"ifexp": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "("
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "_if"
},
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "cond",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "then",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "else",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SYMBOL",
"name": "_exp"
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "cond",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "FIELD",
"name": "then",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "FIELD",
"name": "else",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
}
]
},
{
"type": "FIELD",
"name": "else",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
}
]
}
]
},
{
"type": "STRING",
"value": ")"
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "?"
},
{
"type": "FIELD",
"name": "cond",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "FIELD",
"name": "then",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
},
{
"type": "FIELD",
"name": "else",
"content": {
"type": "SYMBOL",
"name": "_exp"
}
}
]
}
]
}

360
src/node-types.json generated
View File

@@ -11,6 +11,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -19,6 +27,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -60,6 +72,10 @@
{
"type": "/",
"named": false
},
{
"type": "eq",
"named": false
}
]
},
@@ -71,6 +87,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -79,6 +103,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -103,6 +131,66 @@
}
}
},
{
"type": "block",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
},
{
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
},
{
"type": "num",
"named": true
},
{
"type": "parexp",
"named": true
},
{
"type": "vardef",
"named": true
},
{
"type": "word",
"named": true
}
]
}
},
{
"type": "bool",
"named": true,
"fields": {}
},
{
"type": "callexp",
"named": true,
@@ -126,6 +214,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -134,6 +230,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -169,6 +269,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -177,6 +285,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -221,6 +333,162 @@
}
}
},
{
"type": "ifexp",
"named": true,
"fields": {
"cond": {
"multiple": false,
"required": true,
"types": [
{
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
},
{
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
},
{
"type": "num",
"named": true
},
{
"type": "parexp",
"named": true
},
{
"type": "vardef",
"named": true
},
{
"type": "word",
"named": true
}
]
},
"else": {
"multiple": false,
"required": true,
"types": [
{
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
},
{
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
},
{
"type": "num",
"named": true
},
{
"type": "parexp",
"named": true
},
{
"type": "vardef",
"named": true
},
{
"type": "word",
"named": true
}
]
},
"then": {
"multiple": false,
"required": true,
"types": [
{
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
},
{
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
},
{
"type": "num",
"named": true
},
{
"type": "parexp",
"named": true
},
{
"type": "vardef",
"named": true
},
{
"type": "word",
"named": true
}
]
}
}
},
{
"type": "lambda",
"named": true,
@@ -233,6 +501,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -241,6 +517,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -302,6 +582,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -310,6 +598,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -346,6 +638,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -354,6 +654,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -399,6 +703,14 @@
"type": "binexp",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "callexp",
"named": true
@@ -407,6 +719,10 @@
"type": "funcdef",
"named": true
},
{
"type": "ifexp",
"named": true
},
{
"type": "lambda",
"named": true
@@ -463,10 +779,46 @@
"type": "=",
"named": false
},
{
"type": "?",
"named": false
},
{
"type": "F",
"named": false
},
{
"type": "FALSE",
"named": false
},
{
"type": "T",
"named": false
},
{
"type": "TRUE",
"named": false
},
{
"type": "\\",
"named": false
},
{
"type": "_if",
"named": false
},
{
"type": "else",
"named": false
},
{
"type": "eq",
"named": false
},
{
"type": "if",
"named": false
},
{
"type": "num",
"named": true
@@ -474,5 +826,13 @@
{
"type": "word",
"named": true
},
{
"type": "{",
"named": false
},
{
"type": "}",
"named": false
}
]

4397
src/parser.c generated

File diff suppressed because it is too large Load Diff