public override bool SemanticAnalysis() { BlockNode parent = parentBlock; //ищем переменную в родительском блоке while (true) { Variable possibleVariable = parent.BlockVariables.FirstOrDefault(var => var.Name == Value); if (possibleVariable != null) { MainVariable = possibleVariable; return(true); } if (parent.TypeOfNode == NodeType.RootNode) //если добрались до родительского и не нашли, то переменная не объявлена { throw new UndefinedVariableException(LineNumber, Value); } parent = parent.parentBlock;//идём дальше вверх по иерархии блоков } }
public override void SetParentBlock(BlockNode Parent) { parentBlock = Parent; }
public override void SetParentBlock(BlockNode Parent) { parentBlock = Parent; WriteVariable.SetParentBlock(Parent); }
public int LineNumber; //номер строки, где начинается узел (его надо присваивать вручную при синтаксическом анализе) public abstract void SetParentBlock(BlockNode Parent); //установка родительского блока (рекурсивная процедура)
public override void SetParentBlock(BlockNode Parent) { parentBlock = Parent; DeclaratedVariable.SetParentBlock(Parent); }
public override void SetParentBlock(BlockNode Parent) { parentBlock = Parent; outVariable.SetParentBlock(Parent); graph.SetParentBlock(Parent); }
public override void SetParentBlock(BlockNode Parent) { parentBlock = Parent; outGraph.SetParentBlock(Parent); inGraph.SetParentBlock(Parent); }
public override void SetParentBlock(BlockNode Parent) { parentBlock = Parent; InputVar.SetParentBlock(Parent); graph.SetParentBlock(Parent); }