コード例 #1
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IParameterDeclaration ResolveParameter(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IParameterDeclaration parameterDeclaration)
            {
                return(parameterDeclaration);
            }

            return(null);
        }
コード例 #2
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IFunctionDeclaration ResolveFunction(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IFunctionDeclaration functionDeclaration)
            {
                return(functionDeclaration);
            }

            return(null);
        }
コード例 #3
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IProcedureDeclaration ResolveProcedure(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IProcedureDeclaration procedureDeclaration)
            {
                return(procedureDeclaration);
            }

            return(null);
        }
コード例 #4
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IVariableDeclaration ResolveVariable(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IVariableDeclaration variableDeclaration)
            {
                return(variableDeclaration);
            }

            return(null);
        }
コード例 #5
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IConstantDeclaration ResolveConstant(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IConstantDeclaration constantDeclaration)
            {
                return(constantDeclaration);
            }

            return(null);
        }
コード例 #6
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IEnumerationDeclaration ResolveEnumeration(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IEnumerationDeclaration enumerationDeclaration)
            {
                return(enumerationDeclaration);
            }

            return(null);
        }
コード例 #7
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public IAttributeDeclaration ResolveAttribute(string name)
        {
            if (DeclaredIdentifiers.TryGetValue(name, out var declaration) &&
                declaration is IAttributeDeclaration attributeDeclaration)
            {
                return(attributeDeclaration);
            }

            return(null);
        }
コード例 #8
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public Scope CreateChildScope(IRepeatStatement repeat)
        {
            if (repeat.IncrementVariable == null)
            {
                return(this);
            }

            return(new Scope(
                       DeclaredIdentifiers.SetItem(repeat.IncrementVariable.Name, repeat.IncrementVariable),
                       DeclaredDataTypes));
        }
コード例 #9
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public Scope CreateChildScope(IEntityDeclaration entity)
        {
            //TODO: Constant SELF
            var builder = DeclaredIdentifiers.ToBuilder();

            //TODO: renaming
            foreach (var attribute in GetAttributesWithInherited(entity))
            {
                builder[attribute.Name] = attribute;
            }


            return(new Scope(builder.ToImmutable(), DeclaredDataTypes));
        }
コード例 #10
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public Scope CreateChildScope(ITypeDeclaration type)
        {
            var builder = DeclaredIdentifiers.ToBuilder();

            if (TryGetDeclaredEnumerationItems(type, out var enumerationDeclarations))
            {
                foreach (var item in enumerationDeclarations)
                {
                    builder[item.Name] = item;
                }
            }

            //TODO: Constant SELF

            return(new Scope(builder.ToImmutable(), DeclaredDataTypes));
        }
コード例 #11
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public Scope CreateChildScope(IRuleDeclaration rule)
        {
            var builder = DeclaredIdentifiers.ToBuilder();

            //TODO: declarations
            //TODO: type labels (?)

            foreach (var population in rule.Populations)
            {
                builder[population.Name] = population;
            }

            foreach (var variable in rule.LocalVariables)
            {
                builder[variable.Name] = variable;
            }

            return(new Scope(builder.ToImmutable(), DeclaredDataTypes));
        }
コード例 #12
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public Scope CreateChildScope(IFunctionDeclaration function)
        {
            var builder = DeclaredIdentifiers.ToBuilder();

            //TODO: declarations
            //TODO: type labels

            foreach (var parameter in function.Parameters)
            {
                builder[parameter.Name] = parameter;
            }

            foreach (var variable in function.LocalVariables)
            {
                builder[variable.Name] = variable;
            }

            return(new Scope(builder.ToImmutable(), DeclaredDataTypes));
        }
コード例 #13
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
        public Scope CreateChildScope(ISchemaDeclaration schema)
        {
            var identifers = DeclaredIdentifiers.ToBuilder();
            var dataTypes  = DeclaredDataTypes.ToBuilder();

            var importedEnumerationItems = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

            //TODO: duplicate identifiers
            foreach (var declaration in schema.Declarations)
            {
                identifers[declaration.Name] = declaration;

                if (IsNamedDataType(declaration))
                {
                    dataTypes[declaration.Name] = declaration;
                }

                if (declaration is ITypeDeclaration typeDeclaration)
                {
                    if (TryGetDeclaredEnumerationItems(typeDeclaration, out var enumerationDeclarations))
                    {
                        foreach (var enumerationDeclaration in enumerationDeclarations)
                        {
                            if (importedEnumerationItems.Add(enumerationDeclaration.Name))
                            {
                                identifers[enumerationDeclaration.Name] = enumerationDeclaration;
                            }
                            else
                            {
                                identifers.Remove(enumerationDeclaration.Name);
                            }
                        }
                    }
                }
            }

            return(new Scope(identifers.ToImmutable(), dataTypes.ToImmutable()));
        }
コード例 #14
0
ファイル: Scope.cs プロジェクト: ghord/SharpExpress
 public Scope CreateChildScope(IQueryExpression query)
 {
     return(new Scope(
                DeclaredIdentifiers.SetItem(query.VariableDeclaration.Name, query.VariableDeclaration),
                DeclaredDataTypes));
 }