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

74 lines
1.3 KiB
Plaintext

// Quest 1.0 Syntax
quest = {
"quest" ~ quest_name ~ with_cond? ~ "begin"
~ state*
~ "end"
}
quest_name = @{ key_name }
key_name = _{
((ASCII_ALPHA | "_") | (ASCII_ALPHA ~ "_"))*
}
with_cond = _{ "with" ~ lua_expr }
lua_expr = @{ ASCII_ALPHANUMERIC* }
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" ~ lua_expression_scope
~ "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 = { (!"end" ~ ANY)* }
call = {
(ASCII_ALPHANUMERIC | "_")* ~ "(" ~ (call | ",")* ~ ")"
}
/// General Section
// Inferred rules
COMMENT = _{ "--" ~ (!"\n" ~ ANY)* }
WHITESPACE = _{ " " | "\t" | NEWLINE }