Exemplo n.º 1
0
        public object?Transform(IdentifierNode item)
        {
            var valueKeyword = LanguageDefinition.Keywords.OfType <ValueKeywordDefinition>().FirstOrDefault(x => x.Names.Contains(item.TextValue));

            if (valueKeyword != default)
            {
                return(valueKeyword.Value);
            }

            if (ScopeStack.Current.TryGetVariable(item.TextValue, out var value))
            {
                return(value);
            }
            var scopedFunction = LanguageDefinition.ScopedFunctions.FirstOrDefault(func => func.Declaration.Name == item.TextValue);

            if (scopedFunction != null)
            {
                return(MethodGroup.Create(scopedFunction));
            }

            var function = LanguageDefinition.Functions.FirstOrDefault(func => func.Declaration.Name == item.TextValue);

            if (function != null)
            {
                return(MethodGroup.Create(function));
            }

            var test = LanguageDefinition.Tests.FirstOrDefault(func => func.Declaration.Name == item.TextValue);

            if (test != null)
            {
                return(MethodGroup.Create(test));
            }
            return(null);
        }
        public Expression Transform(IdentifierNode item)
        {
            var valueKeyword = LanguageDefinition.Keywords.OfType <ValueKeywordDefinition>().FirstOrDefault(keyword => keyword.Names.Contains(item.TextValue));

            if (valueKeyword != null)
            {
                return(Expression.Constant(valueKeyword.Value));
            }
            var functionDefinition = LanguageDefinition.Functions.Where(func => func.Declaration.Name == item.TextValue).FirstOrDefault();

            if (functionDefinition != null)
            {
                return(Expression.Constant(MethodGroup.Create(functionDefinition)));
            }
            if (CurrentScope.TryGetVariable(item.TextValue, out var expression))
            {
                return(expression);
            }
            throw new NotImplementedException();
        }