using pest

This commit is contained in:
2024-07-11 17:47:26 +02:00
parent 573ba1f745
commit 84c69df276
4 changed files with 143 additions and 429 deletions
+58
View File
@@ -0,0 +1,58 @@
WHITESPACE = _{ " " | "\t" | "\n" }
// [literals]
round = { "(" ~ (expr)* ~ ")" }
curly = { "{" ~ (code_expr)* ~ "}" }
escape = { "\\" ~ ANY }
raw_string = { (!("\\" | "\"") ~ ANY)+ }
string = { "\"" ~ (raw_string | escape )* ~ "\"" }
char = { "'" ~ (escape | ANY) ~ "'" }
bool = @{"true" | "false"}
semicolon = {";"}
// [numbers]
hex = @{ "0" ~ ("x"|"X") ~ ('0'..'9' | 'a'..'f' | 'A'..'F')*}
float = @{ ('0'..'9')* ~ "." ~ ('0'..'9')+ }
int = @{ '0'..'9'+ }
// [identifiers]
identifier = @{ !(hex|float|int) ~ ("_" | 'a'..'z' | 'a'..'z') ~ ( "_" | 'a'..'z' | 'a'..'z' | int )* }
// [definitions]
var_def = { identifier ~ identifier }
var_def_set = { var_def ~ "=" ~ expr ~ semicolon }
func_def = { identifier ~ identifier ~ round ~ curly }
expr = {(
round |
curly |
char |
hex |
float |
int |
bool |
identifier |
string |
semicolon
)+}
code_expr = {(
round |
curly |
char |
var_def_set |
(var_def ~ semicolon) |
hex |
float |
int |
bool |
// identifier |
string |
semicolon
)+}
top_expr = {
(
func_def
)+
}