// // WRITE A CORRECT GRAMMAR FOR THE TINY LANGUAGE IN THIS FILE. // // The grammar is described in data/tinyGrammar.pdf. Do not use dashes // in your non-terminal names. I recommend you use mixed case naming for your // non-terminals instead (e.g. stmtSeq). // // Do not put any string literals in this grammar (e.g. "="). Use only token // names given in TinyLexer.tokens. // // This file contains an expression grammar that uses tokens described in // TinyLexer.tokens. // // NOTE ONE ERROR in the pdf: the second production rule should read: // stmt-seq -> stmt-seq stmt | stmt grammar Tiny; goal: program; program: stmtseq; stmtseq: stmtseq stmt | stmt; stmt: ifstmt | repeatstmt | assignstmt | readstmt | writestmt ; ifstmt: IF exp THEN stmtseq END | IF exp THEN stmtseq ELSE stmtseq END ; repeatstmt: REPEAT stmtseq UNTIL exp; assignstmt: ID EQUAL exp; readstmt: READ ID; writestmt: WRITE exp; exp: simpleexp LT simpleexp | simpleexp EQUAL simpleexp | simpleexp ; simpleexp: simpleexp PLUS term | simpleexp MINUS term | term ; term: term MULTIPLY factor | term DIVIDE factor | factor ; factor: OPAREN exp CPAREN | NUM | ID ;