Esempio n. 1
0
        public static GroupExpression Parse(ExpressionWalker ew, ExpressionToken left, ExpressionToken right)
        {
            ew.IsCurrentOrThrow(left);

            ew.NextOrThrow();
            if (ew.Current.Token == right)
            {
                throw new UnexpectedTokenException($"Expected an expression, found end of group of type {right}");
            }
            var expr = ParseExpression(ew, typeof(GroupExpression));
            var grp  = new GroupExpression()
            {
                _matchLeft = AttributeExtensions.GetAttribute <ExpressionTokenAttribute>(left).Emit.AsResult(), _matchRight = AttributeExtensions.GetAttribute <ExpressionTokenAttribute>(right).Emit.AsResult()
            };

            if (ew.IsCurrent(ExpressionToken.Or))
            {
                grp.InnerExpression = TernaryExpression.Parse(ew, expr);
            }
            else
            {
                grp.InnerExpression = expr;
            }

            ew.IsCurrentOrThrow(right);
            ew.Next();
            return(grp);
        }
Esempio n. 2
0
        public static List <TokenMatch> Tokenize(string codeStr, params ExpressionToken[] exceptFor)
        {
            var code      = new StringBuilder(codeStr);
            var allTokens = new List <(string Regex, ExpressionToken Token, List <ExpressionToken> Swallows, int Order)>(
                Enum.GetValues(typeof(ExpressionToken)).Cast <ExpressionToken>()
                .Where(t => AttributeExtensions.GetAttribute <ManuallySearchedAttribute>(t) == null)
                .Select(t => {
                List <ExpressionToken> DetermineSwallows(ExpressionToken tkn, List <ExpressionToken> @return)
                {
                    @return = @return ?? new List <ExpressionToken>();
                    List <ExpressionToken> swlws = tkn.GetAttributes <SwallowsAttribute>().SelectMany(sw => sw.Targets).Distinct().ToList();
                    foreach (var set in swlws)
                    {
                        @return.Add(set);
                        return(DetermineSwallows(set, @return));
                    }

                    return(@return);
                }

                var attr = AttributeExtensions.GetAttribute <ExpressionTokenAttribute>(t);
                if (attr == null)
                {
                    return(default);
Esempio n. 3
0
 static ReferenceIdentity()
 {
     _literalRegex = AttributeExtensions.GetAttribute <ExpressionTokenAttribute>(ExpressionToken.Literal).Regex;
 }