private Node factor()
        {
            Node node = null;

            switch (currentToken.type)
            {
            case "integer":
                node = new IntNode(currentToken);
                match(Token.INT);
                break;

            case "string":
                node = new StrNode(currentToken);
                match(Token.STRING);
                break;

            case "boolean":
                node = new BoolNode(currentToken);
                match(Token.BOOL);
                break;

            case "identifier":
                node = new IdNode(currentToken);
                match(Token.ID);
                break;

            case "lpar":
                nextToken();
                node = expr();
                match(Token.RPAR);
                break;

            case "negation":
                node = new UnOpNode(currentToken);
                match(Token.NEG);
                node.addChild(factor());
                break;

            default:
                new SyntaxError(currentToken, "Syntax Error: Expected integer, string, bool, identifier or (, got " + currentToken.value);
                break;
            }

            return(node);
        }
Beispiel #2
0
 object IVisitor <object> .visit(IntNode node)
 {
     node.type = Token.INT;
     return(node.type);
 }
 object IVisitor <object> .visit(IntNode node)
 {
     return(null);
 }
Beispiel #4
0
 object IVisitor <object> .visit(IntNode node)
 {
     return(Convert.ToInt32(node.value));
 }