Subversion Repositories programming

Rev

Rev 226 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
225 ira 1
/*******************************************************************************
2
 * File: jminus.y
3
 * 
4
 * Copyright (c) 2006, Ira W. Snyder (devel@irasnyder.com)
5
 * License: GNU General Public License v2
6
 * 
7
 ******************************************************************************/
8
 
9
%{
10
    import java.lang.*;
11
    import java.io.*;
12
    import.java.util.StringTokenizer;
13
%}
14
 
15
/* Token Declarations */
16
%token CLASS
17
%token ID
18
%token PUBLIC
19
%token PRIVATE
20
%token INT
21
%token FLOAT
22
%token VOID
23
%token IF
24
%token ELSE
25
%token WHILE
26
%token RETURN
27
%token ADDOP
28
%token MULOP
29
%token NUM
30
%token LPAREN
31
%token RPAREN
32
%token LBRACE
33
%token RBRACE
34
%token SEMI
35
%token ASSIGNOP
36
 
37
/* JMinus Grammar */
38
%%
39
program : modifier CLASS ID LBRACE method_declaration RBRACE
40
    { System.out.println ("program reduce"); };
41
 
42
modifier : PUBLIC { System.out.println ("modifier reduce"); }
43
    | PRIVATE { System.out.println ("modifier reduce"); };
44
 
45
method_declaration : modifier type_specifier ID LPAREN param RPAREN LBRACE local_declaration stmt_sequence RBRACE
46
    { System.out.println ("method_declaration reduce"); };
47
 
48
type_specifier : INT { System.out.println ("type_specifier -> INT reduce"); }
49
    | FLOAT { System.out.println ("type_specifier -> INT reduce"); }
50
    | VOID { System.out.println ("type_specifier -> INT reduce"); };
51
 
52
param : type_specifier ID { System.out.println ("param reduce"); }
53
    | VOID { System.out.println ("param -> VOID reduce"); };
54
 
55
local_declaration : type_specifier ID SEMI { System.out.println ("local_declaration reduce"); }
56
    | { System.out.println ("local_declaration -> epsilon reduce"); };
57
 
58
stmt_sequence : stmt_sequence statement { System.out.println ("stmt_sequence reduce"); }
59
    | statement { System.out.println ("stmt_sequence -> statement reduce"); };
60
 
61
statement : if_stmt { System.out.println ("statement -> if_stmt reduce"); }
62
    | while_stmt { System.out.println ("statement -> while_stmt reduce"); }
63
    | assign_stmt { System.out.println ("statement -> assign_stmt reduce"); }
64
    | return_stmt { System.out.println ("statement -> return_stmt reduce"); }
65
    | expr_stmt { System.out.println ("statement -> expr_stmt reduce"); };
66
 
67
if_stmt : IF LPAREN exp RPAREN statement ELSE statement { System.out.println ("if_stmt reduce"); };
68
 
69
while_stmt : WHILE LPAREN exp RPAREN statement { System.out.println ("while_stmt reduce"); };
70
 
71
assign_stmt : ID ASSIGNOP exp SEMI { System.out.println ("assign_stmt reduce"); };
72
 
73
return_stmt : RETURN exp SEMI { System.out.println ("return_stmt -> RETURN exp ; reduce"); }
74
    | RETURN SEMI { System.out.println ("return_stmt -> RETURN ; reduce"); };
75
 
76
expr_stmt : exp SEMI { System.out.println ("expr_stmt -> exp ; reduce"); };
77
 
78
exp : exp ADDOP term { System.out.println ("exp -> exp + term reduce"); }
79
    | term { System.out.println ("exp -> term reduce"); };
80
 
81
term : term MULOP factor { System.out.println ("term -> term * factor reduce"); }
82
    | factor { System.out.println ("term -> factor reduce"); };
83
 
84
factor : LPAREN exp RPAREN { System.out.println ("factor -> ( exp ) reduce"); }
85
    | ADDOP factor { System.out.println ("factor -> + factor reduce"); }
86
    | NUM { System.out.println ("factor -> NUM reduce"); }
87
    | ID { System.out.println ("factor -> ID reduce"); };
88
 
89
%%
90
 
91
 
92