openquest/openquest-lib/src/syntax/legacy/v1_0_0/quest_v1.pest

86 lines
1.8 KiB
Plaintext

// Quest 1.0 Syntax
quest = {
"quest" ~ quest_name
~ "begin" ~ state*
~ "end"
}
quest_name = @{ key_name }
key_name = _{
((ASCII_ALPHA | "_") | (ASCII_ALPHA ~ "_"))*
}
state_name = @{ key_name }
state = {
"state" ~ state_name
~ "begin"
~ ( function | when_condition | when_with_condition )*
~ "end"
}
variable = { (ASCII_ALPHANUMERIC ~ "."?)* }
when_trigger = @{ variable }
when_condition = {
"when" ~ when_trigger ~ "begin"
~ lua_expression_scope
~ "end"
}
when_with_expression = {
( (call | variable) ~ "or")*
}
when_with_condition = {
"when" ~ when_trigger
~ "with" ~ when_with_expression
~ "begin" ~ expression
~ "end"
}
// Properties
key = { ASCII_ALPHANUMERIC* }
value = { ASCII_DIGIT* }
/// Lua section
function_name = @{ key_name }
function_arguments = { ASCII_ALPHANUMERIC | ASCII_ALPHANUMERIC ~ "," }
function = {
"function" ~ function_name ~ "(" ~ function_arguments* ~ ")"
~ lua_expression_scope
~ "end"
}
lua_expression_scope = { (local_variable | call)* }
local_variable = { "local" ~ key ~ "=" ~ call }
call = {
(ASCII_ALPHANUMERIC | "_")* ~ "(" ~ (call | ",")* ~ ")"
}
expression = { prefix* ~ primary ~ postfix* ~ (infix ~ prefix* ~ primary ~ postfix* )* }
infix = _{ add | sub | mul | div | pow }
add = { "+" } // Addition
sub = { "-" } // Subtraction
mul = { "*" } // Multiplication
div = { "/" } // Division
pow = { "^" } // Exponentiation
prefix = _{ neg }
neg = { "-" } // Negation
postfix = _{ fac }
fac = { "!" } // Factorial
primary = _{ int | "(" ~ expression ~ ")" }
int = @{ (ASCII_NONZERO_DIGIT ~ ASCII_DIGIT+ | ASCII_DIGIT) }
/// General Section
// Inferred rules
COMMENT = _{ "--" ~ (!"\n" ~ ANY)* }
WHITESPACE = _{ " " | "\t" | NEWLINE }