/** * * @author seagle * @date 2024-7-22 * @Description if语句处理 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MECF.Framework.UI.Core.DxfScript { public class IfSentence:Sentence { private Express ifExpr = null; BlockSentence ifBlock = null; BlockSentence elseBlock = null; public override void Create(StringReader reader) { KeywordType kw = reader.Next(); if (kw != KeywordType.KW_IF) { throw new Exception("SetSentence: if expected"); } kw = reader.Next(); if (kw != KeywordType.KW_ROUND_LEFT) { throw new Exception("Round left expected in if sentence"); } ifExpr = new Express(); ifExpr.Create(reader); kw = reader.Next(); if (kw != KeywordType.KW_ROUND_RIGHT) { throw new Exception("Round right expected in if sentence"); } kw = reader.Next(); if (kw != KeywordType.KW_BRACE_LEFT) { throw new Exception("Brace left expected in if sentence"); } ifBlock = new BlockSentence(); ifBlock.Create(reader); kw = reader.Next(); if(kw== KeywordType.KW_ELSE) { kw = reader.Next(); if (kw != KeywordType.KW_BRACE_LEFT) { throw new Exception("Brace left expected in if-else sentence"); } elseBlock = new BlockSentence(); elseBlock.Create(reader); } else { if(kw!= KeywordType.KW_EOF) { reader.rollback(kw); } } } public override void Execute() { ifExpr.Compute(); if (ifExpr.Root.Var.BoolValue) { if(ifBlock != null) { ifBlock.Execute(); if (ifBlock.ShouldReturn) { ShouldReturn = true; ReturnVar = ifBlock.ReturnVar; return; } } } else { if (elseBlock != null) { elseBlock.Execute(); if (elseBlock.ShouldReturn) { ShouldReturn = true; ReturnVar = elseBlock.ReturnVar; return; } } } } } }