Prílohy:1

Tabuľkou riadený parser

Vytvorte tabuľkou riadenú implementáciu syntaktického analyzátora.

package tab_impl;

import java.util.*;

/**
 *
 * @author vasava
 */
public class Tab_impl {

    public static void main(String args[]) {
        Stack st = new Stack();
        char a;
        String vstup = "()$";
        String[][] akcie = {
            {"",    "(",    ")",    "$"},
            {"S",   "(S)S", "",     ""}
        };
        int i,j, riadok, stlpec;
        i=0;

        System.out.println(st.toString());
        st.push('S');

        while (!st.empty()) {
            System.out.println(st.toString());

            a = (char) st.lastElement(); //vrch zasobnika
            if (!Character.isUpperCase(a) && vstup.charAt(i) == a) //terminal
            {
                st.pop(); //odobratie z vrchu
                i++;
            } 
            else if (Character.isUpperCase(a) && Character.isAlphabetic(a)) //neterminal
            {
                riadok = -1;
                for (j = 0; j < akcie.length; j++) //hladam pravidlo
                {
                    if (akcie[j][0].length() != 0 && akcie[j][0].charAt(0) == a) //nasiel som pravidlo
                    {
                        riadok = j;
                        break;
                    }
                }
                if (riadok == -1) {
                    chyba();
                }

                stlpec = -1;
                for (j = 1; j < akcie[0].length; j++) //hladam terminal
                {
                    if (akcie[0][j].length() != 0 && akcie[0][j].charAt(0) == vstup.charAt(i)) {
                        stlpec = j;
                        break;
                    }
                }
                if (stlpec == -1) {
                    chyba();
                }

                st.pop(); //odobratie z vrchu
                if (akcie[riadok][stlpec].length() > 0) {
                    for (j = akcie[riadok][stlpec].length() - 1; j >= 0; j--) {
                        st.push(akcie[riadok][stlpec].charAt(j));
                    }
                }

            } else {
                chyba();
            }
        }
        System.out.println(st.toString());
        System.out.println("akceptujem");
    }

    static void chyba() {
        System.out.println("Chyba");
        System.exit(0);
    }
}

Výstup

run:
[]
[S]
[S, ), S, (]
[S, ), S]
[S, )]
[S]
[]
akceptujem
BUILD SUCCESSFUL (total time: 0 seconds)