/// <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); }
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); }