750 lines
15 KiB
JSON
750 lines
15 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "urn:endor:ast:sha256:c7c10c6a61158810fa55044f1aa79f3558ac18ca3be59cbf7f2499b5add8df5b",
|
|
"$ref": "#/$defs/AstDocument",
|
|
"$defs": {
|
|
"Span": {
|
|
"type": "object",
|
|
"properties": {
|
|
"start": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 9007199254740991
|
|
},
|
|
"end": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"maximum": 9007199254740991
|
|
}
|
|
},
|
|
"required": [
|
|
"start",
|
|
"end"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"AstDocument": {
|
|
"type": "object",
|
|
"properties": {
|
|
"schema": {
|
|
"const": "urn:endor:ast:sha256:c7c10c6a61158810fa55044f1aa79f3558ac18ca3be59cbf7f2499b5add8df5b"
|
|
},
|
|
"root": {
|
|
"$ref": "#/$defs/AstRoot"
|
|
}
|
|
},
|
|
"required": [
|
|
"schema",
|
|
"root"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"AstRoot": {
|
|
"oneOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Module"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Program"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Expression"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Expr"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Interactive"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/InteractiveInput"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
]
|
|
},
|
|
"Name": {
|
|
"type": "object",
|
|
"properties": {
|
|
"text": {
|
|
"type": "string"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"text",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Program": {
|
|
"type": "object",
|
|
"properties": {
|
|
"declarations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Decl"
|
|
}
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"declarations",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Decl": {
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"$ref": "#/$defs/DeclKind"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"DeclKind": {
|
|
"oneOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Function"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Function"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Class"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Class"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
]
|
|
},
|
|
"Class": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"base": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"fields": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Parameter"
|
|
}
|
|
},
|
|
"methods": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Function"
|
|
}
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"fields",
|
|
"methods",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Function": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"parameters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Parameter"
|
|
}
|
|
},
|
|
"return_type": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"body": {
|
|
"$ref": "#/$defs/Block"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"parameters",
|
|
"return_type",
|
|
"body",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Parameter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"type_name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"type_name",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Block": {
|
|
"type": "object",
|
|
"properties": {
|
|
"statements": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Stmt"
|
|
}
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"statements",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Stmt": {
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"$ref": "#/$defs/StmtKind"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"StmtKind": {
|
|
"oneOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Binding"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Binding"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Assignment"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Assignment"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "MemberAssignment"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/MemberAssignment"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Return"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/ReturnStatement"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Expression"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Expr"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Declaration"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Decl"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
]
|
|
},
|
|
"Binding": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"value": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"value",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Assignment": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"value": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"value",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"MemberAssignment": {
|
|
"type": "object",
|
|
"properties": {
|
|
"object": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
},
|
|
"value": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"object",
|
|
"name",
|
|
"value",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"ReturnStatement": {
|
|
"type": "object",
|
|
"properties": {
|
|
"value": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"InteractiveInput": {
|
|
"type": "object",
|
|
"properties": {
|
|
"statements": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Stmt"
|
|
}
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"statements",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"Expr": {
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"$ref": "#/$defs/ExprKind"
|
|
},
|
|
"span": {
|
|
"$ref": "#/$defs/Span"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"span"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"ExprKind": {
|
|
"oneOf": [
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Name"
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Number"
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "String"
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Symbol"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Name"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Await"
|
|
},
|
|
"data": {
|
|
"$ref": "#/$defs/Expr"
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Unary"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"properties": {
|
|
"operation": {
|
|
"$ref": "#/$defs/UnaryOp"
|
|
},
|
|
"operand": {
|
|
"$ref": "#/$defs/Expr"
|
|
}
|
|
},
|
|
"required": [
|
|
"operation",
|
|
"operand"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Binary"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"properties": {
|
|
"operation": {
|
|
"$ref": "#/$defs/BinaryOp"
|
|
},
|
|
"left": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"right": {
|
|
"$ref": "#/$defs/Expr"
|
|
}
|
|
},
|
|
"required": [
|
|
"operation",
|
|
"left",
|
|
"right"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Member"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"properties": {
|
|
"object": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"name": {
|
|
"$ref": "#/$defs/Name"
|
|
}
|
|
},
|
|
"required": [
|
|
"object",
|
|
"name"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"properties": {
|
|
"kind": {
|
|
"const": "Call"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"properties": {
|
|
"callee": {
|
|
"$ref": "#/$defs/Expr"
|
|
},
|
|
"arguments": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/Expr"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"callee",
|
|
"arguments"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [
|
|
"kind",
|
|
"data"
|
|
],
|
|
"additionalProperties": false
|
|
}
|
|
]
|
|
},
|
|
"UnaryOp": {
|
|
"enum": [
|
|
"Negate"
|
|
]
|
|
},
|
|
"BinaryOp": {
|
|
"enum": [
|
|
"Add",
|
|
"Subtract",
|
|
"Multiply",
|
|
"Divide"
|
|
]
|
|
}
|
|
}
|
|
}
|