From 0e70fc94f8c041a9c656be9a73425ced7a6858f2 Mon Sep 17 00:00:00 2001 From: yhirose Date: Wed, 29 Jul 2015 20:15:09 -0400 Subject: [PATCH] Added pl0.peg. --- grammar/pl0.peg | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 grammar/pl0.peg diff --git a/grammar/pl0.peg b/grammar/pl0.peg new file mode 100644 index 0000000..5da96bd --- /dev/null +++ b/grammar/pl0.peg @@ -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]* +