2021-04-30

Hashmaps in javacc

I want to create a programming language that has multiple functions and a single main function. For the interpreter of the language I am using a hash map, but I do not know how to store intermediate values in the hash map. An example of a valid program includes:

DEF MAIN { ADDITION(x) } ;
DEF ADDITION { x+3 } ;

This is what I have so far:

HashMap<String, Function> Program() : {
    HashMap<String, Function> symbolTable = new HashTable<>();
}
{
    (FunctionDefinition(symbolTable))*
    <EOF>
    {return symbolTable;}
}

void FunctionDefinition(SymbolTable table)
{
    Function f;
    String name;
}
{
    <DEF> <SPACE>
    (
        (name = <MAIN>)
    |   (name = <FUNC> (<SPACE> <PARAM> ))
    <SPACE>
    f = FunctionBody()
    ";"
    {
        if (table.hashKey(name)) { System.out.println("do something");}
        else { table.add(name, f); }
    })
}

void FunctionBody() : {}
{
    <LEFT> <SPACE>
    Expression()
    <SPACE> <RIGHT>
}

void Expression() : {}
{
    AdditiveExpression()
}

void AdditiveExpression() : {
}
{
    MultiplicativeExpression() (<PLUS> MultiplicativeExpression()
    {
        try {
                int a = s.pop();
                int b = s.pop();
                stack.push(a+b);
        }
        catch (ClassCastException ex) {
            System.out.println("Only numbers can be used for arithmetic operations.");
            throw new ParseException();
        }
    })*
}

void MultiplicativeExpression() : {
}
{
    UnaryExpression() (<MUL> UnaryExpression()
    {
        try {
            int a = s.pop();
            int b = s.pop();
            stack.push(a*b);
        }
        catch (ClassCastException ex) {
            System.out.println("Only numbers can be used for arithmetic operations");
            throw new ParseException();
        }
    })*
}

void UnaryExpression() : {
    Token x;
}
{
    (x = <NUMBER> | x = <PARAM>)
    {s.push(x.image);}
}

Any help will be greatly appreciated.



from Recent Questions - Stack Overflow https://ift.tt/3gUnBBh
https://ift.tt/eA8V8J

No comments:

Post a Comment