/* **********************************************
 * Duale Hochschule Baden-Württemberg Karlsruhe
 * Prof. Dr. Jörn Eisenbiegler
 * 
 * Vorlesung Übersetzerbau
 * Praxis ANTLR-Parser für X
 * - Zählen von Zuweisungen
 * 
 * **********************************************
 */

tree grammar AssignCount;

options {
  language = Java;
  output = AST;
  tokenVocab = X;
  ASTLabelType = CommonTree;
}

@header {package de.dhbw.compiler.antlrxtreegrammar;}

@members {

  private int count =0;
  
  public int getCount() { return count; }
  
}


// Deklarationen
decl:       ^(DECL ID ('int' | 'float' | 'string') 'read'? 'print'?);  

decllist:   ^(DECLLIST decl*);

// Ausdr�cke
expr:       ^(('+' | '-' | '/' | '*') expr expr)
          | ^(UMINUS (INTCONST | FLOATCONST))
          | INTCONST | FLOATCONST | STRINGCONST | ID;

// Zuweisungen
assignstat:	  ^(':=' ID expr) {count++;};

// Bedingungen
cond:         ^(('<' |'>' |'=' ) expr expr);

// Bedingte Zuweisung
condstat:   ^('if' cond  stat stat?);

// Schleifen
whilestat:    ^('while' cond stat);
forstat:      ^('for' assignstat cond assignstat stat);

// Anweisungen
stat:         assignstat | condstat | whilestat | forstat | statlist;

statlist:        ^(STATLIST stat*);

// Programme
program:      ^('program' ID decllist statlist);
