Grammar
BrainRot Lang's formal grammar is a Context-Free Grammar (CFG). The parser implements it as a Recursive Descent parser — each grammar rule becomes one function in parser/parseFunc.go and parser/parseExpr.go.
Context-Free Grammar
Statement-level production rules:
grammar.ebnf
statement → varDecl | assignStmt | printStmt | ifStmt
| whileStmt | forStmt | funcDecl | returnStmt
| breakStmt | continueStmt | exprStmt
varDecl → "trust_me_bro" IDENT "=" expression
assignStmt → IDENT ("=" | "+=" | "-=" | "*=" | "/=") expression
printStmt → "say_my_name" "(" expression ")"
ifStmt → "chat_is_this_real" expression "{" statement* "}"
("wait_hold_up" expression "{" statement* "}")*
("nah_bro" "{" statement* "}")?
whileStmt → "on_repeat" expression "{" statement* "}"
forStmt → "run_it_back" "(" varDecl ";" expression ";" assignStmt ")"
"{" statement* "}"
funcDecl → "let_him_cook" IDENT "(" params? ")" "{" statement* "}"
returnStmt → "take_this" expression?
breakStmt → "mission_abort"
continueStmt → "skip_this_one"Expression Grammar
Expression rules encode operator precedence through the function call chain:
expr.ebnf
expression → or_expr
or_expr → and_expr ("||" and_expr)*
and_expr → equality ("&&" equality)*
equality → comparison (("==" | "!=") comparison)*
comparison → term (("<" | ">" | "<=" | ">=") term)*
term → factor (("+" | "-") factor)*
factor → unary (("*" | "/" | "%" | "**") unary)*
unary → ("!" | "-") unary | postfix
postfix → primary ("++" | "--")?
primary → INT | FLOAT | STRING | "fr_fr" | "cap" | "ghosted"
| IDENT | IDENT "(" arguments? ")" | "(" expression ")"
| IDENT "[" expression "]" | "[" elements? "]"Operator Precedence
Operator precedence is implemented by the expression grammar chain — functions lower in the chain parse operators with higher precedence. From lowest to highest:
| Level | Operator(s) | Associativity |
|---|---|---|
| 1 (lowest) | || | Left |
| 2 | && | Left |
| 3 | == != | Left |
| 4 | < > <= >= | Left |
| 5 | + - | Left |
| 6 | * / % | Left |
| 7 | ** | Right |
| 8 | ! - (unary) | Right |
| 9 (highest) | ++ -- (postfix) | Left |