aboutsummaryrefslogtreecommitdiff
path: root/GRAMMAR.txt
blob: 9e30c24b248f9b3c90f43a377a7e40a7365ca0f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org>
//
// SPDX-License-Identifier: CC-BY-NC-SA-4.0

root -> toplevel*
toplevel -> function

function -> "func" IDENTIFIER "(" param? ")" IDENTIFIER block
param -> IDENTIFIER IDENTIFIER ( "," param )?

block -> "{" ( statement )* "}"

statement -> ( return ) ";"
return -> "return" expression

expression -> equality
equality -> comparison ( ( "==" | "!=" ) comparison )*
comparison -> term ( ( "<" | "<=" |  ">" | ">=" ) term )?
term -> numeral ( ( "<<" | ">>" ) numeral )*
numeral -> factor ( ( "+" | "-" ) factor )*
factor -> unary ( ( "*" | "/" ) unary )*
unary -> ( "-" | "!" | "~" )? primary
primary -> grouping | literal | call
grouping -> "(" expression ")"
literal -> string | number
string -> STRING*
number -> NUMBER IDENTIFIER
call -> IDENTIFIER "(" arg? ")"
arg -> expression ( "," arg )?