示例#1
0
 /// <summary>
 /// Creates an instance of a SequenceParserException used by the SequenceParser, when the function
 /// with the given name does not exist or input or output parameters do not match.
 /// </summary>
 /// <param name="paramBindings">The parameter bindings of the function invocation.</param>
 /// <param name="errorKind">The kind of error.</param>
 /// <param name="badParamIndex">The index of a bad parameter or -1 if another error occurred.</param>
 public SequenceParserException(InvocationParameterBindings paramBindings, SequenceParserError errorKind, int badParamIndex)
 {
     Kind           = errorKind;
     Name           = paramBindings.Name;
     NumGivenInputs = paramBindings.Arguments.Length;
     BadParamIndex  = badParamIndex;
     ClassifyDefinitionType(paramBindings);
 }
示例#2
0
 void ClassifyDefinitionType(InvocationParameterBindings paramBindings)
 {
     if (paramBindings is RuleInvocationParameterBindings)
     {
         DefType = DefinitionType.Action;
     }
     else if (paramBindings is SequenceInvocationParameterBindings)
     {
         DefType = DefinitionType.Sequence;
     }
     else if (paramBindings is ProcedureInvocationParameterBindings)
     {
         DefType = DefinitionType.Procedure;
     }
     else if (paramBindings is FunctionInvocationParameterBindings)
     {
         DefType = DefinitionType.Function;
     }
 }
示例#3
0
        protected override bool IsCalledEntityExisting(InvocationParameterBindings paramBindings, GrGenType ownerType)
        {
            // besides determining whether the called entity exists, this function
            // resolves pre- and context packages to packages, i.e. calls of entities from packages 
            // without package prefix are changed to package calls (may occur for entities from the same package)

            if(paramBindings is RuleInvocationParameterBindings)
            {
                RuleInvocationParameterBindings ruleParamBindings = (RuleInvocationParameterBindings)paramBindings;
                if(ruleParamBindings.PrePackage != null)
                {
                    ruleParamBindings.Package = ruleParamBindings.PrePackage;
                    ruleParamBindings.PackagePrefixedName = ruleParamBindings.PrePackage + "::" + ruleParamBindings.Name;
                    return Array.IndexOf(ruleNames, ruleParamBindings.PrePackage + "::" + ruleParamBindings.Name) != -1;
                }
                else
                {
                    if(Array.IndexOf(ruleNames, ruleParamBindings.Name) != -1)
                    {
                        ruleParamBindings.Package = null;
                        ruleParamBindings.PackagePrefixedName = ruleParamBindings.Name;
                        return true;
                    }
                    if(ruleParamBindings.PrePackageContext != null)
                    {
                        ruleParamBindings.Package = ruleParamBindings.PrePackageContext;
                        ruleParamBindings.PackagePrefixedName = ruleParamBindings.PrePackageContext + "::" + ruleParamBindings.Name;
                        return Array.IndexOf(ruleNames, ruleParamBindings.PrePackageContext + "::" + ruleParamBindings.Name) != -1;
                    }
                    return false;
                }
            }
            else if(paramBindings is SequenceInvocationParameterBindings)
            {
                SequenceInvocationParameterBindings seqParamBindings = (SequenceInvocationParameterBindings)paramBindings;
                if(seqParamBindings.PrePackage != null)
                {
                    seqParamBindings.Package = seqParamBindings.PrePackage;
                    seqParamBindings.PackagePrefixedName = seqParamBindings.PrePackage + "::" + seqParamBindings.Name;
                    return Array.IndexOf(sequenceNames, seqParamBindings.PrePackage + "::" + seqParamBindings.Name) != -1;
                }
                else
                {
                    if(Array.IndexOf(sequenceNames, seqParamBindings.Name) != -1)
                    {
                        seqParamBindings.Package = null;
                        seqParamBindings.PackagePrefixedName = seqParamBindings.Name;
                        return true;
                    }
                    if(seqParamBindings.PrePackageContext != null)
                    {
                        seqParamBindings.Package = seqParamBindings.PrePackageContext;
                        seqParamBindings.PackagePrefixedName = seqParamBindings.PrePackageContext + "::" + seqParamBindings.Name;
                        return Array.IndexOf(sequenceNames, seqParamBindings.PrePackageContext + "::" + seqParamBindings.Name) != -1;
                    }
                    return false;
                }
            }
            else if(paramBindings is ProcedureInvocationParameterBindings)
            {
                ProcedureInvocationParameterBindings procParamBindings = (ProcedureInvocationParameterBindings)paramBindings;
                if(ownerType != null)
                {
                    return ownerType.GetProcedureMethod(procParamBindings.Name) != null;
                }
                else
                {
                    if(procParamBindings.PrePackage != null)
                    {
                        procParamBindings.Package = procParamBindings.PrePackage;
                        procParamBindings.PackagePrefixedName = procParamBindings.PrePackage + "::" + procParamBindings.Name;
                        return Array.IndexOf(procedureNames, procParamBindings.PrePackage + "::" + procParamBindings.Name) != -1;
                    }
                    else
                    {
                        if(Array.IndexOf(procedureNames, procParamBindings.Name) != -1)
                        {
                            procParamBindings.Package = null;
                            procParamBindings.PackagePrefixedName = procParamBindings.Name;
                            return true;
                        }
                        if(procParamBindings.PrePackageContext != null)
                        {
                            procParamBindings.Package = procParamBindings.PrePackageContext;
                            procParamBindings.PackagePrefixedName = procParamBindings.PrePackageContext + "::" + procParamBindings.Name;
                            return Array.IndexOf(procedureNames, procParamBindings.PrePackageContext + "::" + procParamBindings.Name) != -1;
                        }
                        return false;
                    }
                }
            }
            else if(paramBindings is FunctionInvocationParameterBindings)
            {
                FunctionInvocationParameterBindings funcParamBindings = (FunctionInvocationParameterBindings)paramBindings;
                if(ownerType != null)
                {
                    return ownerType.GetFunctionMethod(funcParamBindings.Name) != null;
                }
                else
                {
                    if(funcParamBindings.PrePackage != null)
                    {
                        funcParamBindings.Package = funcParamBindings.PrePackage;
                        funcParamBindings.PackagePrefixedName = funcParamBindings.PrePackage + "::" + funcParamBindings.Name;
                        return Array.IndexOf(functionNames, funcParamBindings.PrePackage + "::" + funcParamBindings.Name) != -1;
                    }
                    else
                    {
                        if(Array.IndexOf(functionNames, funcParamBindings.Name) != -1)
                        {
                            funcParamBindings.Package = null;
                            funcParamBindings.PackagePrefixedName = funcParamBindings.Name;
                            return true;
                        }
                        if(funcParamBindings.PrePackageContext != null)
                        {
                            funcParamBindings.Package = funcParamBindings.PrePackageContext;
                            funcParamBindings.PackagePrefixedName = funcParamBindings.PrePackageContext + "::" + funcParamBindings.Name;
                            return Array.IndexOf(functionNames, funcParamBindings.PrePackageContext + "::" + funcParamBindings.Name) != -1;
                        }
                        return false;
                    }
                }
            }
            throw new Exception("Internal error");
        }
示例#4
0
 protected override string OutputParameterType(int i, InvocationParameterBindings paramBindings, GrGenType ownerType)
 {
     if(paramBindings is RuleInvocationParameterBindings)
     {
         RuleInvocationParameterBindings ruleParamBindings = (RuleInvocationParameterBindings)paramBindings;
         return TypesHelper.DotNetTypeToXgrsType(ruleParamBindings.Action.RulePattern.Outputs[i]);
     }
     else if(paramBindings is SequenceInvocationParameterBindings)
     {
         SequenceInvocationParameterBindings seqParamBindings = (SequenceInvocationParameterBindings)paramBindings;
         if(seqParamBindings.SequenceDef is SequenceDefinitionInterpreted)
         {
             SequenceDefinitionInterpreted seqDef = (SequenceDefinitionInterpreted)seqParamBindings.SequenceDef;
             return seqDef.OutputVariables[i].Type;
         }
         else
         {
             SequenceDefinitionCompiled seqDef = (SequenceDefinitionCompiled)seqParamBindings.SequenceDef;
             return TypesHelper.DotNetTypeToXgrsType(seqDef.SeqInfo.OutParameterTypes[i]);
         }
     }
     else if(paramBindings is ProcedureInvocationParameterBindings)
     {
         ProcedureInvocationParameterBindings procParamBindings = (ProcedureInvocationParameterBindings)paramBindings;
         if(ownerType != null)
             return TypesHelper.DotNetTypeToXgrsType(ownerType.GetProcedureMethod(procParamBindings.Name).Outputs[i]);
         else
             return TypesHelper.DotNetTypeToXgrsType(procParamBindings.ProcedureDef.Outputs[i]);
     }
     throw new Exception("Internal error");
 }
示例#5
0
 protected override int NumOutputParameters(InvocationParameterBindings paramBindings, GrGenType ownerType)
 {
     if(paramBindings is RuleInvocationParameterBindings)
     {
         RuleInvocationParameterBindings ruleParamBindings = (RuleInvocationParameterBindings)paramBindings;
         return ruleParamBindings.Action.RulePattern.Outputs.Length;
     }
     else if(paramBindings is SequenceInvocationParameterBindings)
     {
         SequenceInvocationParameterBindings seqParamBindings = (SequenceInvocationParameterBindings)paramBindings;
         if(seqParamBindings.SequenceDef is SequenceDefinitionInterpreted)
         {
             SequenceDefinitionInterpreted seqDef = (SequenceDefinitionInterpreted)seqParamBindings.SequenceDef;
             return seqDef.OutputVariables.Length;
         }
         else
         {
             SequenceDefinitionCompiled seqDef = (SequenceDefinitionCompiled)seqParamBindings.SequenceDef;
             return seqDef.SeqInfo.OutParameterTypes.Length;
         }
     }
     else if(paramBindings is ProcedureInvocationParameterBindings)
     {
         ProcedureInvocationParameterBindings procParamBindings = (ProcedureInvocationParameterBindings)paramBindings;
         if(ownerType != null)
             return ownerType.GetProcedureMethod(procParamBindings.Name).Outputs.Length;
         else
             return procParamBindings.ProcedureDef.Outputs.Length;
     }
     throw new Exception("Internal error");
 }
示例#6
0
 protected override bool IsCalledEntityExisting(InvocationParameterBindings paramBindings, GrGenType ownerType)
 {
     if(paramBindings is RuleInvocationParameterBindings)
     {
         RuleInvocationParameterBindings ruleParamBindings = (RuleInvocationParameterBindings)paramBindings;
         return ruleParamBindings.Action != null;
     }
     else if(paramBindings is SequenceInvocationParameterBindings)
     {
         SequenceInvocationParameterBindings seqParamBindings = (SequenceInvocationParameterBindings)paramBindings;
         return seqParamBindings.SequenceDef != null;
     }
     else if(paramBindings is ProcedureInvocationParameterBindings)
     {
         ProcedureInvocationParameterBindings procParamBindings = (ProcedureInvocationParameterBindings)paramBindings;
         if(ownerType != null)
             return ownerType.GetProcedureMethod(procParamBindings.Name) != null;
         else
             return procParamBindings.ProcedureDef != null;
     }
     else if(paramBindings is FunctionInvocationParameterBindings)
     {
         FunctionInvocationParameterBindings funcParamBindings = (FunctionInvocationParameterBindings)paramBindings;
         if(ownerType != null)
             return ownerType.GetFunctionMethod(funcParamBindings.Name) != null;
         else
             return funcParamBindings.FunctionDef != null;
     }
     throw new Exception("Internal error");
 }
示例#7
0
 protected abstract string OutputParameterType(int i, InvocationParameterBindings paramBindings, GrGenType ownerType);
 private String BuildParameters(InvocationParameterBindings paramBindings, IProcedureDefinition procedureMethod)
 {
     String parameters = "";
     for(int i = 0; i < paramBindings.ArgumentExpressions.Length; i++)
     {
         if(paramBindings.ArgumentExpressions[i] != null)
         {
             String typeName = TypesHelper.DotNetTypeToXgrsType(procedureMethod.Inputs[i]);
             String cast = "(" + TypesHelper.XgrsTypeToCSharpType(typeName, model) + ")";
             parameters += ", " + cast + GetSequenceExpression(paramBindings.ArgumentExpressions[i], null);
         }
         else
         {
             // the sequence parser always emits all argument expressions, for interpreted and compiled
             throw new Exception("Internal error: missing argument expressions");
         }
     }
     return parameters;
 }
示例#9
0
 protected override string OutputParameterType(int i, InvocationParameterBindings paramBindings, GrGenType ownerType)
 {
     if(paramBindings is RuleInvocationParameterBindings)
     {
         RuleInvocationParameterBindings ruleParamBindings = (RuleInvocationParameterBindings)paramBindings;
         return rulesToOutputTypes[ruleParamBindings.PackagePrefixedName][i];
     }
     else if(paramBindings is SequenceInvocationParameterBindings)
     {
         SequenceInvocationParameterBindings seqParamBindings = (SequenceInvocationParameterBindings)paramBindings;
         return sequencesToOutputTypes[seqParamBindings.PackagePrefixedName][i];
     }
     else if(paramBindings is ProcedureInvocationParameterBindings)
     {
         ProcedureInvocationParameterBindings procParamBindings = (ProcedureInvocationParameterBindings)paramBindings;
         if(ownerType != null)
             return TypesHelper.DotNetTypeToXgrsType(ownerType.GetProcedureMethod(procParamBindings.Name).Outputs[i]);
         else
             return proceduresToOutputTypes[procParamBindings.PackagePrefixedName][i];
     }
     throw new Exception("Internal error");
 }
 void ClassifyDefinitionType(InvocationParameterBindings paramBindings)
 {
     if(paramBindings is RuleInvocationParameterBindings)
         DefType = DefinitionType.Action;
     else if(paramBindings is SequenceInvocationParameterBindings)
         DefType = DefinitionType.Sequence;
     else if(paramBindings is ProcedureInvocationParameterBindings)
         DefType = DefinitionType.Procedure;
     else if(paramBindings is FunctionInvocationParameterBindings)
         DefType = DefinitionType.Function;
 }
 /// <summary>
 /// Creates an instance of a SequenceParserException used by the SequenceParser, when the function 
 /// with the given name does not exist or input or output parameters do not match.
 /// </summary>
 /// <param name="paramBindings">The parameter bindings of the function invocation.</param>
 /// <param name="errorKind">The kind of error.</param>
 /// <param name="badParamIndex">The index of a bad parameter or -1 if another error occurred.</param>
 public SequenceParserException(InvocationParameterBindings paramBindings, SequenceParserError errorKind, int badParamIndex)
 {
     Kind = errorKind;
     Name = paramBindings.Name;
     NumGivenInputs = paramBindings.Arguments.Length;
     BadParamIndex = badParamIndex;
     ClassifyDefinitionType(paramBindings);
 }
 /// <summary>
 /// Creates an instance of a SequenceParserException used by the SequenceParser, when the function
 /// with the given name does not exist or input or output parameters do not match.
 /// </summary>
 /// <param name="paramBindings">The parameter bindings of the function invocation.</param>
 /// <param name="errorKind">The kind of error.</param>
 public SequenceParserException(InvocationParameterBindings paramBindings, SequenceParserError errorKind)
     : this(paramBindings, errorKind, -1)
 {
 }
示例#13
0
 private String BuildParametersInDeclarations(InvocationParameterBindings paramBindings, out String declarations)
 {
     String parameters = "";
     declarations = "";
     for(int i = 0; i < paramBindings.ArgumentExpressions.Length; i++)
     {
         if(paramBindings.ArgumentExpressions[i] != null)
         {
             String typeName;
             if(rulesToInputTypes.ContainsKey(paramBindings.PackagePrefixedName))
                 typeName = rulesToInputTypes[paramBindings.PackagePrefixedName][i];
             else 
                 typeName = sequencesToInputTypes[paramBindings.PackagePrefixedName][i];
             String type = TypesHelper.XgrsTypeToCSharpType(typeName, model);
             String name = "tmpvar_" + tmpVarCtr.ToString();
             ++tmpVarCtr;
             declarations += type + " " + name + " = " + "(" + type + ")" + GetSequenceExpression(paramBindings.ArgumentExpressions[i], null) + ";";
             parameters += ", " + name;
         }
         else
         {
             // the sequence parser always emits all argument expressions, for interpreted and compiled
             throw new Exception("Internal error: missing argument expressions");
         }
     }
     return parameters;
 }
示例#14
0
 private String BuildParametersInObject(InvocationParameterBindings paramBindings)
 {
     String parameters = ", new object[] { ";
     for(int i = 0; i < paramBindings.ArgumentExpressions.Length; i++)
     {
         if(paramBindings.ArgumentExpressions[i] != null)
         {
             parameters += ", " + GetSequenceExpression(paramBindings.ArgumentExpressions[i], null);
         }
         else
         {
             // the sequence parser always emits all argument expressions, for interpreted and compiled
             throw new Exception("Internal error: missing argument expressions");
         }
     }
     return parameters + " }";
 }
示例#15
0
 protected override int NumOutputParameters(InvocationParameterBindings paramBindings, GrGenType ownerType)
 {
     if(paramBindings is RuleInvocationParameterBindings)
     {
         RuleInvocationParameterBindings ruleParamBindings = (RuleInvocationParameterBindings)paramBindings;
         return rulesToOutputTypes[ruleParamBindings.PackagePrefixedName].Count;
     }
     else if(paramBindings is SequenceInvocationParameterBindings)
     {
         SequenceInvocationParameterBindings seqParamBindings = (SequenceInvocationParameterBindings)paramBindings;
         return sequencesToOutputTypes[seqParamBindings.PackagePrefixedName].Count;
     }
     else if(paramBindings is ProcedureInvocationParameterBindings)
     {
         ProcedureInvocationParameterBindings procParamBindings = (ProcedureInvocationParameterBindings)paramBindings;
         if(ownerType != null)
             return ownerType.GetProcedureMethod(procParamBindings.Name).Outputs.Length;
         else
             return proceduresToOutputTypes[procParamBindings.PackagePrefixedName].Count;
     }
     throw new Exception("Internal error");
 }
示例#16
0
 /// <summary>
 /// Creates an instance of a SequenceParserException used by the SequenceParser, when the function
 /// with the given name does not exist or input or output parameters do not match.
 /// </summary>
 /// <param name="paramBindings">The parameter bindings of the function invocation.</param>
 /// <param name="errorKind">The kind of error.</param>
 public SequenceParserException(InvocationParameterBindings paramBindings, SequenceParserError errorKind)
     : this(paramBindings, errorKind, -1)
 {
 }
示例#17
0
 protected abstract bool IsCalledEntityExisting(InvocationParameterBindings paramBindings, GrGenType ownerType);
示例#18
0
 protected abstract int NumOutputParameters(InvocationParameterBindings paramBindings, GrGenType ownerType);
示例#19
0
 private String BuildParameters(InvocationParameterBindings paramBindings)
 {
     String parameters = "";
     for (int i = 0; i < paramBindings.ArgumentExpressions.Length; i++)
     {
         if (paramBindings.ArgumentExpressions[i] != null)
         {
             String typeName;
             if(rulesToInputTypes.ContainsKey(paramBindings.PackagePrefixedName))
                 typeName = rulesToInputTypes[paramBindings.PackagePrefixedName][i];
             else if(sequencesToInputTypes.ContainsKey(paramBindings.PackagePrefixedName))
                 typeName = sequencesToInputTypes[paramBindings.PackagePrefixedName][i];
             else if(proceduresToInputTypes.ContainsKey(paramBindings.PackagePrefixedName))
                 typeName = proceduresToInputTypes[paramBindings.PackagePrefixedName][i];
             else
                 typeName = functionsToInputTypes[paramBindings.PackagePrefixedName][i];
             String cast = "(" + TypesHelper.XgrsTypeToCSharpType(typeName, model) + ")";
             parameters += ", " + cast + GetSequenceExpression(paramBindings.ArgumentExpressions[i], null);
         }
         else
         {
             // the sequence parser always emits all argument expressions, for interpreted and compiled
             throw new Exception("Internal error: missing argument expressions");
         }
     }
     return parameters;
 }