Subversion Repositories programming

Rev

Rev 244 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*******************************************************************************
 * File: robot.y
 * 
 * Copyright (c) 2006, Ira W. Snyder (devel@irasnyder.com)
 * License: GNU General Public License v2
 *
 * This file implements the grammar that controls our fictional apple-bag
 * robot from Project #3, Question #2.
 ******************************************************************************/

%{
    import java.lang.*;
    import java.io.*;
    import java.util.StringTokenizer;
%}

/* Token Declarations */
%token PUT
%token TAKE

/* Robot Grammar */
%%

program : S         { System.out.println ("There are: " + r.getVal() + " apples in the bag!"); };

S : PUT S TAKE S    { System.out.println ("S -> PUT S TAKE S"); }
    | PUT S         { System.out.println ("S -> PUT S"); r.incVal(); }
    |               { System.out.println ("S -> epsilon"); };

%%

private Yylex lexer;

public void yyerror (String error)
{
    System.out.println ("Parse Error: " + error);
}

int yylex ()
{
    int lex_return = -1;

    try
    {
        lex_return = lexer.yylex();
    }
    catch (IOException e)
    {
        System.out.println ("IO Error: " + e);
    }

    return lex_return;
}

public Parser (Reader r)
{
    lexer = new Yylex (r, this);
}

public static void main (String[] args) throws Exception
{
    try
    {
        Parser yyparser = new Parser (new FileReader (args[0]));
        yyparser.yyparse();
    }
    catch (Exception e)
    {
        System.out.println ("Tried to take too many apples out of the bag!");
    }
}

public class Robot
{
    int val = 0;

    void incVal () { val++; }
    void decVal () { val--; }
    int  getVal () { return val; }
}

Robot r = new Robot();