All pastes #382582 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-03-05 19:27 UTC
rendered paste body
// COMS22201: Syntax analyser

class Syn extends Parser;

options {
  importVocab = Lex;
  buildAST = true;
}

program : 
    PROGRAM^ programname SEMICOLON! block PERIOD!
  ;

programname :
    IDENTIFIER
  ;

block :
    ( VAR^ declarations )? compoundstatement
  ;

declarations :
    ( idlist COLON! type SEMICOLON! )+
  ;
  
idlist:
    IDENTIFIER ( COMMA! IDENTIFIER )*
  ;
  
type:
    REAL | INTEGER
  ;
  
compoundstatement :
    BEGIN^ ( statement SEMICOLON! )* END!
  ;

statement :
    WRITE^ OPENPAREN! ( STRING | expression ) CLOSEPAREN!
  | WRITELN
  | READ^ OPENPAREN! variable CLOSEPAREN!
  | variable EQUALS expression
  ;

expression:
    unaryop term (( PLUS | MINUS ) term )*
  ;
  
unaryop:
    ( PLUS | MINUS )?
  ;
  
term:
    factor (( MULTIPLY | DIVIDE ) factor )*
  ;

factor:
    variable
  | constant
  | OPENPAREN! expression CLOSEPAREN!
  ;

constant:
    REALNUM
  | INTEGERNUM
  ;
  
variable :
    IDENTIFIER
  ;