86 lines
1.8 KiB
Plaintext
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 }
|
|
|