-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsyntax.bnf
More file actions
27 lines (27 loc) · 2.33 KB
/
syntax.bnf
File metadata and controls
27 lines (27 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PROGRAM ::= { PATHDEF | CALCDEF } "begin" STATEMENTS "end"
PATHDEF ::= "path" NAME [ "("[ PARAMS ]")" ] STATEMENTS "endpath"
CALCDEF ::= "calculation" NAME "("[ PARAMS ]")" [ STATEMENTS ] "returns" EXPR "endcalc"
PARAMS ::= [ VAR { "," VAR } ] /*Parameter-Liste für jede Funktion erforderlich für Eindeutigkeit der Namen*/
BUCHST ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
ZIFFER ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
NAME ::= ["@"] ( BUCHST | "_" ) { BUCHST | "_" | ZIFFER }
VAR ::= NAME
COLOR ::= EXPR "," EXPR "," EXPR
COND ::= ( "(" COND_S ")" | COND_S ) [ ( "not" | "and" | "or" ) COND ]
COND_S ::= EXPR ("<" | ">" | "<=" | ">=" | "=" | "<>") EXPR
EXPR ::= TERM [ ( "-" | "+" ) EXPR ]
TERM ::= FAKTOR [ ( "*" | "/" ) TERM ]
FAKTOR ::= OPERAND [ "^" FAKTOR ]
OPERAND ::= [ "-" ] ( "sqrt" | "sin" | "cos" | "tan" "(" EXPR ")" | "rand" "(" EXPR "," EXPR ")" | "(" EXPR ")" | "|" EXPR "|" | ZIFFER {ZIFFER} ["." {ZIFFER}] | VAR | NAME "(" ARGS ")" )
ARGS ::= [ EXPR { "," EXPR } ]
STATEMENTS ::= STATEMENT { STATEMENT }
STATEMENT ::= CMD_DRAW | CMD_MARK | CMD_CALC | CMD_IF | CMD_COUNTER | CMD_CNT | CMD_WHILE | CMD_REPEAT
CMD_DRAW ::= ((("walk" ["back"]) | ("jump" ["back"]) | ("turn" ["left" | "right"]) | "direction") EXPR) | ( ("walk" | "jump") "home" ) | ("color" COLOR) | "clear" | "stop" | "finish" | ("path" NAME ["(" [ ARGS ] ")"])
CMD_MARK ::= ("mark") | ("walk mark") | ("jump mark")
CMD_CALC ::= ("store" EXPR "in" VAR) | ("add" EXPR "to" VAR) | ("sub" EXPR "from" VAR) | ("mul" VAR "by" EXPR) | ("div" VAR "by" EXPR)
CMD_IF ::= "if" COND "then" STATEMENTS ["else" STATEMENTS] "endif"
CMD_COUNTER::= "do" EXPR "times" STATEMENTS "done"
CMD_CNT ::= "counter" VAR "from" EXPR ("to" | "downto") EXPR ["step" EXPR] "do" STATEMENTS "done"
CMD_WHILE ::= "while" COND "do" STATEMENTS "done"
CMD_REPEAT ::= "repeat" STATEMENTS "until" COND
COMMENT ::= "\"" {BUCHST | ZIFFER | "_" | "@" | "*" | "/" | "(" | ")" | "[" | "]" | "+" | "-" | "," | "." | ">" | "<" | "=" | "%" | "\"" | "'"} "\n"