Пример #1
0
        internal static bool NeedsLeft(this XSharpToken token)
        {
            if (token == null)
            {
                return(false);
            }
            switch (token.Type)
            {
            case XSharpLexer.ASSIGN_ADD:
            case XSharpLexer.ASSIGN_BITAND:
            case XSharpLexer.ASSIGN_BITOR:
            case XSharpLexer.ASSIGN_DIV:
            case XSharpLexer.ASSIGN_EXP:
            case XSharpLexer.ASSIGN_LSHIFT:
            case XSharpLexer.ASSIGN_MOD:
            case XSharpLexer.ASSIGN_MUL:
            case XSharpLexer.ASSIGN_OP:
            case XSharpLexer.ASSIGN_RSHIFT:
            case XSharpLexer.ASSIGN_SUB:
            case XSharpLexer.ASSIGN_XOR:
                return(true);

            case XSharpLexer.COLON:
            case XSharpLexer.DOT:
                return(true);
            }
            if (token.IsPrefix())
            {
                return(false);
            }
            return(token.IsBinary());
        }
Пример #2
0
 internal static bool IsPrimaryOrPrefix(this XSharpToken token)
 {
     if (token.IsPrimary())
     {
         return(true);
     }
     if (token.IsPrefix())
     {
         return(true);
     }
     return(false);
 }
Пример #3
0
        internal static bool CanJoin(this XSharpToken token, XSharpToken nextToken)
        {
            if (token == null)
            {
                return(nextToken.IsName() || nextToken.IsLiteral() || nextToken.IsPrefix());
            }
            if (token.IsPrefix() || token.IsBinary())          // we allow .and. .not. and even .not. .not.
            {
                return(nextToken.IsPrimaryOrPrefix());
            }
            if (nextToken.IsBinary() || nextToken.NeedsLeft() || nextToken.IsPostFix())
            {
                return(token.IsPrimary() || token.IsClose());
            }

            return(false);
        }
Пример #4
0
 internal static bool NeedsRight(this XSharpToken token)
 {
     return(token.IsBinary() || token.IsPrefix());
 }