parent
9d5b5027e3
commit
0e70fc94f8
@ -0,0 +1,35 @@ |
||||
|
||||
program <- block '.' _ |
||||
|
||||
block <- const var procedure statement |
||||
const <- ('CONST' _ ident '=' _ number (',' _ ident '=' _ number)* ';' _)? |
||||
var <- ('VAR' _ ident (',' _ ident)* ';' _)? |
||||
procedure <- ('PROCEDURE' _ ident ';' _ block ';' _)* |
||||
|
||||
statement <- (assignment / call / statements / if / while / write)? |
||||
assignment <- ident ':=' _ expression |
||||
call <- 'CALL' _ ident |
||||
statements <- 'BEGIN' _ statement (';' _ statement )* 'END' _ |
||||
if <- 'IF' _ condition 'THEN' _ statement |
||||
while <- 'WHILE' _ condition 'DO' _ statement |
||||
out <- '!' _ expression |
||||
|
||||
condition <- odd / compare |
||||
odd <- 'ODD' _ expression |
||||
compare <- expression compare_op expression |
||||
compare_op <- < '=' / '#' / '<=' / '<' / '>=' / '>' > _ |
||||
|
||||
expression <- sign term (term_op term)* |
||||
sign <- < [-+]? > _ |
||||
term_op <- < [-+] > _ |
||||
|
||||
term <- factor (factor_op factor)* |
||||
factor_op <- < [*/] > _ |
||||
|
||||
factor <- ident / number / '(' _ expression ')' _ |
||||
|
||||
ident <- < [a-z] ([a-z] / [0-9])* > _ |
||||
number <- < [0-9]+ > _ |
||||
|
||||
~_ <- [ \t\r\n]* |
||||
|
Loading…
Reference in new issue