Rev 226 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*******************************************************************************
* File: jminus.y
*
* Copyright (c) 2006, Ira W. Snyder (devel@irasnyder.com)
* License: GNU General Public License v2
*
******************************************************************************/
%{
import java.lang.*;
import java.io.*;
import.java.util.StringTokenizer;
%}
/* Token Declarations */
%token CLASS
%token ID
%token PUBLIC
%token PRIVATE
%token INT
%token FLOAT
%token VOID
%token IF
%token ELSE
%token WHILE
%token RETURN
%token ADDOP
%token MULOP
%token NUM
%token LPAREN
%token RPAREN
%token LBRACE
%token RBRACE
%token SEMI
%token ASSIGNOP
/* JMinus Grammar */
%%
program : modifier CLASS ID LBRACE method_declaration RBRACE
{ System.out.println ("program reduce"); };
modifier : PUBLIC { System.out.println ("modifier reduce"); }
| PRIVATE { System.out.println ("modifier reduce"); };
method_declaration : modifier type_specifier ID LPAREN param RPAREN LBRACE local_declaration stmt_sequence RBRACE
{ System.out.println ("method_declaration reduce"); };
type_specifier : INT { System.out.println ("type_specifier -> INT reduce"); }
| FLOAT { System.out.println ("type_specifier -> INT reduce"); }
| VOID { System.out.println ("type_specifier -> INT reduce"); };
param : type_specifier ID { System.out.println ("param reduce"); }
| VOID { System.out.println ("param -> VOID reduce"); };
local_declaration : type_specifier ID SEMI { System.out.println ("local_declaration reduce"); }
| { System.out.println ("local_declaration -> epsilon reduce"); };
stmt_sequence : stmt_sequence statement { System.out.println ("stmt_sequence reduce"); }
| statement { System.out.println ("stmt_sequence -> statement reduce"); };
statement : if_stmt { System.out.println ("statement -> if_stmt reduce"); }
| while_stmt { System.out.println ("statement -> while_stmt reduce"); }
| assign_stmt { System.out.println ("statement -> assign_stmt reduce"); }
| return_stmt { System.out.println ("statement -> return_stmt reduce"); }
| expr_stmt { System.out.println ("statement -> expr_stmt reduce"); };
if_stmt : IF LPAREN exp RPAREN statement ELSE statement { System.out.println ("if_stmt reduce"); };
while_stmt : WHILE LPAREN exp RPAREN statement { System.out.println ("while_stmt reduce"); };
assign_stmt : ID ASSIGNOP exp SEMI { System.out.println ("assign_stmt reduce"); };
return_stmt : RETURN exp SEMI { System.out.println ("return_stmt -> RETURN exp ; reduce"); }
| RETURN SEMI { System.out.println ("return_stmt -> RETURN ; reduce"); };
expr_stmt : exp SEMI { System.out.println ("expr_stmt -> exp ; reduce"); };
exp : exp ADDOP term { System.out.println ("exp -> exp + term reduce"); }
| term { System.out.println ("exp -> term reduce"); };
term : term MULOP factor { System.out.println ("term -> term * factor reduce"); }
| factor { System.out.println ("term -> factor reduce"); };
factor : LPAREN exp RPAREN { System.out.println ("factor -> ( exp ) reduce"); }
| ADDOP factor { System.out.println ("factor -> + factor reduce"); }
| NUM { System.out.println ("factor -> NUM reduce"); }
| ID { System.out.println ("factor -> ID reduce"); };
%%