{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "lolcode",
"rules": {
"source_file": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "HAI"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "version"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "STRING",
"value": "KTHXBYE"
}
]
},
"version": {
"type": "PATTERN",
"value": "[0-9]+(\\.[0-9]+)*"
},
"comment": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "BTW"
},
{
"type": "PATTERN",
"value": "[^\\n]*"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "OBTW"
},
{
"type": "PATTERN",
"value": "[^\\n]*"
},
{
"type": "STRING",
"value": "TLDR"
}
]
}
]
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable_declaration"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "print_statement"
},
{
"type": "SYMBOL",
"name": "input_statement"
},
{
"type": "SYMBOL",
"name": "function_declaration"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "loop_statement"
},
{
"type": "SYMBOL",
"name": "return_statement"
},
{
"type": "SYMBOL",
"name": "break_statement"
},
{
"type": "SYMBOL",
"name": "expression_statement"
}
]
},
"variable_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "I HAS A"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "ITZ"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"assignment": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "R"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"print_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "VISIBLE"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"input_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "GIMMEH"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
"parameter": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "AN"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "YR"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
"function_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "HOW IZ I"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "parameter"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "STRING",
"value": "IF U SAY SO"
}
]
},
"argument": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "AN"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "YR"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
"function_call": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "I IZ"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "argument"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "MKAY"
},
{
"type": "BLANK"
}
]
}
]
},
"if_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "O RLY?"
},
{
"type": "STRING",
"value": "YA RLY"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "NO WAI"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "OIC"
}
]
},
"loop_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "IM IN YR"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "STRING",
"value": "IM OUTTA YR"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"return_statement": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "FOUND YR"
},
{
"type": "STRING",
"value": "FOUND YARN"
}
]
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"break_statement": {
"type": "STRING",
"value": "GTFO"
},
"expression_statement": {
"type": "PREC",
"value": -1,
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
"_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "function_call"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "boolean"
}
]
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "SUM OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "DIFF OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "PRODUKT OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "QUOSHUNT OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "MOD OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "BOTH OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "EITHER OF"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "BOTH SAEM"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "DIFFRINT"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": "AN"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
]
},
"unary_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "NOT"
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z_][a-zA-Z0-9_]*"
},
"number": {
"type": "PATTERN",
"value": "-?[0-9]+(\\.[0-9]+)?"
},
"string": {
"type": "PATTERN",
"value": "\"[^\"]*\""
},
"boolean": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "WIN"
},
{
"type": "STRING",
"value": "FAIL"
}
]
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [
[
"function_call"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}