示例#1
0
        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;//идём дальше вверх по иерархии блоков
            }
        }
示例#2
0
 public override void SetParentBlock(BlockNode Parent)
 {
     parentBlock = Parent;
 }
示例#3
0
 public override void SetParentBlock(BlockNode Parent)
 {
     parentBlock = Parent;
     WriteVariable.SetParentBlock(Parent);
 }
示例#4
0
 public int LineNumber;                                 //номер строки, где начинается узел (его надо присваивать вручную при синтаксическом анализе)
 public abstract void SetParentBlock(BlockNode Parent); //установка родительского блока (рекурсивная процедура)
示例#5
0
 public override void SetParentBlock(BlockNode Parent)
 {
     parentBlock = Parent;
     DeclaratedVariable.SetParentBlock(Parent);
 }
示例#6
0
 public override void SetParentBlock(BlockNode Parent)
 {
     parentBlock = Parent;
     outVariable.SetParentBlock(Parent);
     graph.SetParentBlock(Parent);
 }
示例#7
0
 public override void SetParentBlock(BlockNode Parent)
 {
     parentBlock = Parent;
     outGraph.SetParentBlock(Parent);
     inGraph.SetParentBlock(Parent);
 }
示例#8
0
 public override void SetParentBlock(BlockNode Parent)
 {
     parentBlock = Parent;
     InputVar.SetParentBlock(Parent);
     graph.SetParentBlock(Parent);
 }