119 lines
2.4 KiB
Text
119 lines
2.4 KiB
Text
# vim:fileencoding=utf-8:foldmethod=marker
|
|
|
|
Program <- skip (Function _endline*)+ eof
|
|
|
|
# *** variable definition *** {{{
|
|
|
|
Variable <- IDENTIFIER Definition
|
|
/ return_keyword " is " value
|
|
|
|
Definition <- " is " (value / "a " type)
|
|
|
|
value <- IDENTIFIER
|
|
/ number
|
|
|
|
|
|
type <- "number"
|
|
|
|
# }}}
|
|
|
|
fn_keyword <- "how-to"
|
|
|
|
argouments_keyword <- "requires"
|
|
|
|
return_keyword <- "resoult"
|
|
|
|
function_keywords <- fn_keyword / argouments_keyword / return_keyword
|
|
|
|
Function <-
|
|
fn_keyword " " IDENTIFIER ":" newline
|
|
Requires endline
|
|
Resoult endline
|
|
(Step endline)+
|
|
|
|
Requires <- argouments_keyword " " Argouments
|
|
|
|
Argouments <- "nothing"
|
|
/ "a " type " " IDENTIFIER (" and a " type " " IDENTIFIER)*
|
|
|
|
Resoult <- return_keyword " is " ("nothing" / "a " type)
|
|
|
|
Fn_call <- IDENTIFIER " " (value (" and " value)*)? (steps_keyword " " number"-"number (" and " number"-"number)*)?
|
|
|
|
if_keyword <- "if"
|
|
|
|
If_call <- if_keyword " " value ((" and " value)* " are " / " is ") operation " " (Fn_call / Variable)
|
|
|
|
operation <- "equal"
|
|
/ "different"
|
|
/ "true"
|
|
/ "false"
|
|
|
|
if_keywords <- if_keyword / operation
|
|
|
|
repeat_keyword <- "repeat"
|
|
|
|
step_keyword <- "step" # single step
|
|
|
|
steps_keyword <- "steps" # multiple steps
|
|
|
|
relative_keyword <- "from" # from x step to the end/current positionx
|
|
|
|
relative_position <- "the start"
|
|
|
|
relative_numbering_keyword <- "steps ago"
|
|
|
|
relative_numbering <- number " " relative_numbering_keyword
|
|
|
|
Repeat_call <- repeat_keyword " " (
|
|
step_keyword " " number
|
|
/ steps_keyword " " number"-"number ("and" number"-"number)*
|
|
/ relative_keyword " " (
|
|
relative_position
|
|
/ relative_numbering
|
|
/ step_keyword " " number
|
|
)
|
|
) (" with " value (" and " value)*)?
|
|
|
|
repeat_call_keywords <- repeat_keyword
|
|
/ step_keyword
|
|
/ steps_keyword
|
|
/ relative_keyword
|
|
/ relative_position
|
|
/ relative_numbering_keyword
|
|
|
|
Step <- number") "
|
|
(Variable
|
|
/ If_call
|
|
/ Repeat_call
|
|
/ Fn_call) endline
|
|
|
|
IDENTIFIER <- !keyword [A-Za-z] [A-Za-z0-9_]*
|
|
|
|
generic_keywords <- "a "
|
|
/ "is "
|
|
/ "and "
|
|
/ "nothing "
|
|
keyword <- function_keywords / if_keywords / repeat_call_keywords / generic_keywords
|
|
|
|
comment <- "//" (!newline .)* newline
|
|
# *** Nicities *** {{{
|
|
|
|
skip <- ([ \n] / comment)*
|
|
|
|
endline <- &. " "* comment? "\n"?
|
|
_endline <- &. " "* comment? "\n"
|
|
|
|
eof <- !.
|
|
|
|
newline <- "\n"
|
|
|
|
number <- binary
|
|
/ hex
|
|
/ dec
|
|
|
|
binary <- "0b" [01]+
|
|
hex <- "0x" [0-9A-Fa-f]+
|
|
dec <- [0-9]+
|
|
|
|
# }}}
|