package org.scribble.parser.ast.name;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.AstFactoryImpl;
import org.scribble.ast.name.qualified.DataTypeNode;
import org.scribble.ast.name.qualified.GProtocolNameNode;
import org.scribble.ast.name.qualified.LProtocolNameNode;
import org.scribble.ast.name.qualified.MessageSigNameNode;
import org.scribble.ast.name.qualified.ModuleNameNode;
import org.scribble.ast.name.simple.NonRoleParamNode;
import org.scribble.ast.name.simple.OpNode;
import org.scribble.ast.name.simple.RecVarNode;
import org.scribble.ast.name.simple.RoleNode;
import org.scribble.ast.name.simple.ScopeNode;
import org.scribble.sesstype.kind.DataTypeKind;
import org.scribble.sesstype.kind.Global;
import org.scribble.sesstype.kind.Local;
import org.scribble.sesstype.kind.ModuleKind;
import org.scribble.sesstype.kind.NonRoleParamKind;
import org.scribble.sesstype.kind.OpKind;
import org.scribble.sesstype.kind.RecVarKind;
import org.scribble.sesstype.kind.RoleKind;
import org.scribble.sesstype.kind.SigKind;
public class AntlrSimpleName
{
private static final String ANTLR_EMPTY_OPERATOR = "EMPTY_OPERATOR";
//private static final String ANTLR_NO_SCOPE = "NO_SCOPE";
public static ModuleNameNode toModuleNameNode(CommonTree ct)
{
return (ModuleNameNode) AstFactoryImpl.FACTORY.QualifiedNameNode(ct, ModuleKind.KIND, getName(ct)); // Cannot use SimpleNameNode because qualified uses the node's elements, not the node's text itself
}
public static GProtocolNameNode toGProtocolNameNode(CommonTree ct)
{
return (GProtocolNameNode) AstFactoryImpl.FACTORY.QualifiedNameNode(ct, Global.KIND, getName(ct)); // Cannot use SimpleNameNode because qualified uses the node's elements, not the node's text itself
}
public static LProtocolNameNode toLProtocolNameNode(CommonTree ct)
{
return (LProtocolNameNode) AstFactoryImpl.FACTORY.QualifiedNameNode(ct, Local.KIND, getName(ct));
}
public static DataTypeNode toDataTypeNameNode(CommonTree ct)
{
return (DataTypeNode) AstFactoryImpl.FACTORY.QualifiedNameNode(ct, DataTypeKind.KIND, getName(ct));
}
public static MessageSigNameNode toMessageSigNameNode(CommonTree ct)
{
return (MessageSigNameNode) AstFactoryImpl.FACTORY.QualifiedNameNode(ct, SigKind.KIND, getName(ct));
}
public static RoleNode toRoleNode(CommonTree ct)
{
return (RoleNode) AstFactoryImpl.FACTORY.SimpleNameNode(ct, RoleKind.KIND, getName(ct));
}
public static <K extends NonRoleParamKind> NonRoleParamNode<K> toParamNode(K kind, CommonTree ct)
{
return AstFactoryImpl.FACTORY.NonRoleParamNode(ct, kind, getName(ct));
}
public static OpNode toOpNode(CommonTree ct)
{
String op = getName(ct);
return op.equals(ANTLR_EMPTY_OPERATOR)
? (OpNode) AstFactoryImpl.FACTORY.SimpleNameNode(ct, OpKind.KIND, OpNode.EMPTY_OPERATOR_IDENTIFIER)
: (OpNode) AstFactoryImpl.FACTORY.SimpleNameNode(ct, OpKind.KIND, getName(ct));
}
public static ScopeNode toScopeNode(CommonTree ct)
{
/*String scope = getName(ct);
if (scope.equals(ANTLR_NO_SCOPE))
{
return null;
}*/
throw new RuntimeException("TODO: " + ct);
}
public static RecVarNode toRecVarNode(CommonTree ct)
{
return (RecVarNode) AstFactoryImpl.FACTORY.SimpleNameNode(ct, RecVarKind.KIND, getName(ct));
}
public static String getName(CommonTree ct)
{
return ct.getText();
}
}