SetSentence.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. *
  3. * @author seagle
  4. * @date 2024-7-22
  5. * @Description 赋值语句处理
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace MECF.Framework.UI.Core.DxfScript
  13. {
  14. public class SetSentence:Sentence
  15. {
  16. private Variable _var = null;
  17. private Express _expr = null;
  18. public override void Create(StringReader reader)
  19. {
  20. KeywordType kw = reader.Next();
  21. if (kw != KeywordType.KW_VARIABLE)
  22. {
  23. throw new Exception("SetSentence: variable name expected");
  24. }
  25. string varName = reader.Data();
  26. VariableDataType dataType = ScriptVariables.GetVariableDataTypeByName(varName);
  27. _var = new Variable(varName, dataType);
  28. kw = reader.Next();
  29. if (kw != KeywordType.KW_SET)
  30. {
  31. throw new Exception("SetSentence: set expected");
  32. }
  33. _expr = new Express();
  34. _expr.Create(reader);
  35. _expr.ComputeNode(_expr.Root, true);
  36. if (_var.DataType != _expr.Root.Var.DataType)
  37. {
  38. throw new Exception("SetSentence: variable type and expression type not match");
  39. }
  40. }
  41. public override void Execute()
  42. {
  43. _expr.Compute();
  44. _var.CopyFrom(_expr.Root.Var);
  45. }
  46. }
  47. }