예제 #1
0
파일: Parser.cs 프로젝트: WinUP/WADV-Unity
        /// <summary>
        /// 处理逻辑否
        /// </summary>
        /// <returns></returns>
        private Expression ParseLogicNot()
        {
            var position = Tokens.Current.Position;

            Tokens.MoveToNext();
            var content = GeneralParser(TokenType.String, TokenType.Number, TokenType.PluginCallStart, TokenType.Variable, TokenType.Constant, TokenType.LeftParenthesis, TokenType.LogicNot);
            // 双重取否改布尔转换
            Expression result = new LogicNotExpression(position)
            {
                Content = content
            };

            if (!(content is LogicNotExpression contentLevel1))
            {
                return(result);
            }
            result = new ToBooleanExpression(position)
            {
                Value = contentLevel1.Content
            };
            content = contentLevel1.Content;
            // 布尔转换时将后续连续取否收缩至不超过一个
            while (content is LogicNotExpression contentLevel2 && contentLevel2.Content is LogicNotExpression contentLevel3)
            {
                ((ToBooleanExpression)result).Value = contentLevel3.Content;
                content = contentLevel3.Content;
            }
            return(result);
        }
예제 #2
0
        public void nil_is_false()
        {
            // nil
            var       target = new ToBooleanExpression(new NullLiteralExpression());
            AstHelper helper = Mother.CreateRuntime();

            var result = target.Compile(helper).Eval <bool>();

            Assert.IsFalse(result);
        }