First commit

This commit is contained in:
Evan Dunbar 2024-09-23 20:43:43 -05:00
commit 8e99061065
47 changed files with 9107 additions and 0 deletions

551
src/grammar.json generated Normal file
View file

@ -0,0 +1,551 @@
{
"name": "zanscript",
"rules": {
"translation_unit": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_top_level_item"
}
},
"_top_level_item": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_directive"
},
{
"type": "SYMBOL",
"name": "_command"
},
{
"type": "SYMBOL",
"name": "_statement"
}
]
},
"_directive": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "define"
},
{
"type": "SYMBOL",
"name": "include"
}
]
},
"define": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "DEFINE"
},
{
"type": "STRING",
"value": "define"
},
{
"type": "STRING",
"value": "Define"
}
]
},
{
"type": "SYMBOL",
"name": "match"
},
{
"type": "SYMBOL",
"name": "match"
}
]
},
"include": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "INCLUDE"
},
{
"type": "STRING",
"value": "include"
},
{
"type": "STRING",
"value": "Include"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"_command": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "action"
},
{
"type": "SYMBOL",
"name": "_control"
}
]
},
"action": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "ACTION"
},
{
"type": "STRING",
"value": "action"
},
{
"type": "STRING",
"value": "Action"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "COMPLETE"
},
{
"type": "STRING",
"value": "complete"
},
{
"type": "STRING",
"value": "Complete"
}
]
}
]
},
"_control": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "branch"
},
{
"type": "SYMBOL",
"name": "loop"
}
]
},
"branch": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "IF"
},
{
"type": "STRING",
"value": "if"
},
{
"type": "STRING",
"value": "If"
}
]
},
{
"type": "SYMBOL",
"name": "comparison"
},
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "ELSE"
},
{
"type": "STRING",
"value": "else"
},
{
"type": "STRING",
"value": "Else"
}
]
},
{
"type": "SYMBOL",
"name": "block"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "ENDIF"
},
{
"type": "STRING",
"value": "endif"
},
{
"type": "STRING",
"value": "Endif"
},
{
"type": "STRING",
"value": "EndIf"
}
]
}
]
},
"loop": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "WHILE"
},
{
"type": "STRING",
"value": "while"
},
{
"type": "STRING",
"value": "While"
}
]
},
{
"type": "SYMBOL",
"name": "comparison"
},
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "ENDWHILE"
},
{
"type": "STRING",
"value": "endwhile"
},
{
"type": "STRING",
"value": "Endwhile"
}
]
}
]
},
"comparison": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_argument"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "STRING",
"value": ">"
},
{
"type": "STRING",
"value": "="
}
]
},
{
"type": "SYMBOL",
"name": "_argument"
}
]
},
"block": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_statement"
},
{
"type": "SYMBOL",
"name": "_command"
}
]
}
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "function"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "comment"
}
]
},
"function": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_argument"
},
{
"type": "STRING",
"value": ","
}
]
}
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_argument"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"_argument": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "variable"
}
]
},
"assignment": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
"_expression": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_argument"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "/"
}
]
},
{
"type": "SYMBOL",
"name": "_argument"
}
]
}
},
{
"type": "BLANK"
}
]
}
]
},
"comment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
"variable": {
"type": "PATTERN",
"value": "@[a-zA-Z0-9_]+"
},
"match": {
"type": "PATTERN",
"value": "[a-zA-Z0-9_.]+"
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z_][a-zA-Z0-9_]*"
},
"number": {
"type": "PATTERN",
"value": "\\d+(\\.\\d+)?"
},
"string": {
"type": "PATTERN",
"value": "['\"].*['\"]"
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}