File Xiog.html    Author Bill McKeeman    Copyright © 2007

program = stmts eof "program1" ;
 
stmts = stmt "stmts1" (';' stmt "stmts2")* ;
 
stmt = "stmt1" 
     | selection "stmt2"
     | iteration "stmt3"
     | assignment "stmt4" ;
      
selection = 'if' alts 'fi' "selection1" ;
 
iteration = 'do' alts 'od' "iteration1" ;
 
alts = alt "alts1" ('::' alt "alts2")* ;
 
alt = guard '?' stmts "alt1" ;
 
guard = expr "guard1" ;
 
assignment = vars ':=' exprs                  "assignment1"
           | vars ':=' subprogram ':=' exprs  "assignment2"
           |      ':=' subprogram ':=' exprs  "assignment3"
           | vars ':=' subprogram ':='        "assignment4"
           |      ':=' subprogram ':='        "assignment5" ;
           
vars = id "vars1" (',' id "vars2")* ;
 
exprs = expr "exprs1" (',' expr "exprs2")* ;
 
subprogram = id "subprogram1" ;
 
expr = disjunction "expr1" ;
 
disjunction = conjunction "disjunction1" ('|' conjunction "disjunction2")* ;
 
conjunction = negation "conjunction1" ('&' negation "conjunction2")* ;
 
negation = relation "negation1" 
         | '~' relation "negation2" ;
         
relation = sum          "relation1"
         | sum '<'  sum "relation2"
         | sum '<=' sum "relation3"
         | sum '='  sum "relation4"
         | sum '~=' sum "relation5"
         | sum '>=' sum "relation6"
         | sum '>'  sum "relation7" ;
         
sum = (term "sum1" | '-' term "sum2") ('+' term "sum3" | '-' term "sum4")* ;
 
term = factor "term1" 
      ('*' factor "term2" | '/' factor "term3" | '//' factor "term4")* ;
      
factor = 'true'       "factor1"
       | 'false'      "factor2"
       | integer      "factor3"
       | real         "factor4"
       | id           "factor5"
       | '(' expr ')' "factor6"
       | 'b2i' factor "factor7"
       | 'i2r' factor "factor8"
       | 'r2i' factor "factor9"
       | 'rand'       "factor10" ;