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:

LevelOperator(s)Associativity
1 (lowest)||Left
2&&Left
3== !=Left
4< > <= >=Left
5+ -Left
6* / %Left
7**Right
8! - (unary)Right
9 (highest)++ -- (postfix)Left