Startseite < Informatik < Algorithmen Datenstrukturen / Software-Engineering / Programmiersprachen < Compiler Interpreter < Setty Tinyray < Tinyray-Scanner Tinyray-Parser / Tinyray-Language < [ DRUCK , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 ] Tinyray-LanguageKit Tinyray-Visitables Tinyray-Visitors > Tinyray-Raytracer / Tinyray-Wallpapers > > / Java C/C++ POV-Ray LaTeX > / Künstliche Intelligenz > Schach Privates / Inhalt >
Tinyray-LanguageKit
Die konkrete Fabrik LanguageKit erzeugt einen besuchbaren Syntaxbaum zur Quellsprache Tinyray.
Einführung Allgemeines zu LanguageKit von Tinyray
LanguageKit ist eine konkrete Fabrik, welche besuchbare Knoten des Language-Packages erzeugt.
Implementierung Implementierung der LanguageKit-Klasse
Im Folgenden sehen Sie die Implementierung der LanguageKit-Klasse.
LanguageKit.java
package tinyray.language;

import java.util.Iterator;
import java.util.List;

import tinyray.frontend.ParseTreeKit;

/**
 * Die Klasse LanguageKit ist eine konkrete Fabrik, mit der ein
 * Syntaxbaum bestehend aus besuchbaren Knoten erzeugt werden kann.
 */

public class LanguageKit implements ParseTreeKit<Visitable, Tinyray> {

    /**
     * Erzeugt einen Tinyray-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Tinyray-Knotens.
     * @return Der Tinyray-Knoten.
     */

    public Tinyray getTinyray(List<Visitable> arguments) {
        Tinyray result = new Tinyray();
        Iterator<Visitable> iterator = arguments.listIterator();
        while (iterator.hasNext()) {
            Visitable next = iterator.next();

            if (next instanceof Camera) {
                result.camera = (Camera)next;
            } else if (next instanceof Background) {
                result.background = (Background)next;
            } else if (next instanceof Ambience) {
                result.ambience = (Ambience)next;
            } else if (next instanceof Fog) {
                result.fog = (Fog)next;
            } else if (next instanceof Sun) {
                result.suns.add((Sun)next);
            } else {
                result.visitables.add(next);
            }
        }
        return result;
    }

    /**
     * Erzeugt einen Camera-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Camera-Knotens.
     * @return Der Camera-Knoten.
     */

    public Visitable getCamera(List<Visitable> arguments) {
        Camera result = new Camera();
        result.location = (Vector)arguments.get(0);
        result.lookAt = (Vector)arguments.get(1);
        if (arguments.size() > 2) {
            result.up = (Vector)arguments.get(2);
        } else {
            result.up.= new Real(1.0);
        }
        return result;
    }

    /**
     * Erzeugt einen Background-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Background-Knotens.
     * @return Der Background-Knoten.
     */

    public Visitable getBackground(List<Visitable> arguments) {
        Background result = new Background();
        result.color = (Vector)arguments.get(0);
        return result;
    }

    /**
     * Erzeugt einen Ambience-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Ambience-Knotens.
     * @return Der Ambience-Knoten.
     */

    public Visitable getAmbience(List<Visitable> arguments) {
        Ambience result = new Ambience();
        result.color = (Vector)arguments.get(0);
        return result;
    }

    /**
     * Erzeugt einen Fog-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Fog-Knotens.
     * @return Der Fog-Knoten.
     */

    public Visitable getFog(List<Visitable> arguments) {
        Fog result = new Fog();
        result.color = (Vector)arguments.get(0);
        result.density = (Real)arguments.get(1);
        return result;
    }

    /**
     * Erzeugt einen Defaults-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Defaults-Knotens.
     * @return Der Defaults-Knoten.
     */

    public Visitable getDefaults(List<Visitable> arguments) {
        Defaults result = new Defaults();
        result.parameters = (Parameters)arguments.get(0);
        return result;
    }

    /**
     * Erzeugt einen Bounding-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Bounding-Knotens.
     * @return Der Bounding-Knoten.
     */

    public Visitable getBounding(List<Visitable> arguments) {
        Bounding result = new Bounding();

        Iterator<Visitable> visitables = arguments.iterator();
        while (visitables.hasNext()) {
            result.visitables.add(visitables.next());
        }
        return result;
    }

    /**
     * Erzeugt einen Triangle-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Triangle-Knotens.
     * @return Der Triangle-Knoten.
     */

    public Visitable getTriangle(List<Visitable> arguments) {
        Triangle result = new Triangle();
        result.= (Vector)arguments.get(0);
        result.= (Vector)arguments.get(1);
        result.= (Vector)arguments.get(2);
        if (arguments.size() > 3) {
            result.parameters = (Parameters)arguments.get(3);
        }
        return result;
    }

    /**
     * Erzeugt einen Sphere-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Sphere-Knotens.
     * @return Der Sphere-Knoten.
     */

    public Visitable getSphere(List<Visitable> arguments) {
        Sphere result = new Sphere();
        result.center = (Vector)arguments.get(0);
        result.radius = (Real)arguments.get(1);
        if (arguments.size() > 2) {
            result.parameters = (Parameters)arguments.get(2);
        }
        return result;
    }

    /**
     * Erzeugt einen Plane-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Plane-Knotens.
     * @return Der Plane-Knoten.
     */

    public Visitable getPlane(List<Visitable> arguments) {
        Plane result = new Plane();
        result.= (Vector)arguments.get(0);
        result.= (Vector)arguments.get(1);
        result.= (Vector)arguments.get(2);
        if (arguments.size() > 3) {
            result.parameters = (Parameters)arguments.get(3);
        }
        return result;
    }

    /**
     * Erzeugt einen Sun-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Sun-Knotens.
     * @return Der Sun-Knoten.
     */

    public Visitable getSun(List<Visitable> arguments) {
        Sun result = new Sun();
        result.direction = (Vector)arguments.get(0);
        result.color = (Vector)arguments.get(1);
        return result;
    }

    /**
     * Erzeugt einen Parameters-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Parameters-Knotens.
     * @return Der Parameters-Knoten.
     */

    public Visitable getParameters(List<Visitable> arguments) {
        Parameters result = new Parameters();
        for (int i = 0; i < arguments.size(); i++) {
            result.visitables.add(arguments.get(i));
        }
        return result;
    }

    /**
     * Erzeugt einen Vector-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Vector-Knotens.
     * @return Der Vector-Knoten.
     */

    public Visitable getVector(List<Visitable> arguments) {
        Vector result = new Vector();
        result.= (Real)arguments.get(0);
        result.= (Real)arguments.get(1);
        result.= (Real)arguments.get(2);
        return result;
    }

    /**
     * Erzeugt einen Real-Knoten und gibt diesen Knoten zurück.
     * @param arguments Die Kindelemente des Real-Knotens.
     * @return Der Real-Knoten.
     */

    public Visitable getReal(String real) {
        return new Real(Double.parseDouble(real));
    }
}