private Expression compilePrimaryExpression(Node node)
{
if( node.getNodeType() == Node.IDENTIFIER)
{
Node currentNode = node;
List tupple = new ArrayList();
List parameterExprs = new ArrayList();
boolean method = false;
while( currentNode != null)
{
tupple.add(currentNode.getNodeValue());
if( currentNode.getNodeType() == Node.INVOKE )
{
method = true;
break;
}
currentNode = currentNode.getFirstChild();
}
while( method && currentNode.hasNextChild())
{
parameterExprs.add(compileExpression(currentNode.getNextChild()));
}
if( method)
{
return new InvokeExpression(symtbl, tupple,parameterExprs);
}
return new PrimaryExpression(symtbl, tupple,parameterExprs);
}
else if( node.getNodeType() == Node.INVOKE)
{
Node currentNode = node;
List tupple = new ArrayList();
List parameterExprs = new ArrayList();
boolean method = false;
while( currentNode != null)
{
tupple.add(currentNode.getNodeValue());
if( currentNode.getNodeType() == Node.INVOKE )
{
method = true;
break;
}
currentNode = currentNode.getFirstChild();
}
while( method && currentNode.hasNextChild())
{
parameterExprs.add(compileExpression(currentNode.getNextChild()));
}
return new InvokeExpression(symtbl, tupple,parameterExprs);
}
else if( node.getNodeType() == Node.CREATOR)
{
Node currentNode = node.getFirstChild();
List tupple = new ArrayList();
List parameterExprs = new ArrayList();
boolean method = false;
while( currentNode != null)
{
tupple.add(currentNode.getNodeValue());
if( currentNode.getNodeType() == Node.INVOKE )
{
method = true;
break;
}
currentNode = currentNode.getFirstChild();
}
while( method && currentNode.hasNextChild())
{
parameterExprs.add(compileExpression(currentNode.getNextChild()));
}
return new CreatorExpression(symtbl, tupple,parameterExprs);
}
else if( node.getNodeType() == Node.LITERAL)