mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-11-13 22:55:29 +00:00
36 lines
1.0 KiB
Plaintext
36 lines
1.0 KiB
Plaintext
|
|
||
|
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]*
|
||
|
|