public override void visit(formal_parameters fp)
 {
     foreach (var id in fp.params_list.SelectMany(tp => tp.idents.idents))
     {
         CheckVariableAlreadyDefined(id);
         UpperBlockNames.Add(id.name);
     }
 }
        public override void visit(variable_definitions vd)
        {
            foreach (var id in vd.var_definitions.SelectMany(vds => vds.vars.idents))
            {
                CheckVariableAlreadyDefined(id);
                UpperBlockNames.Add(id.name);
            }

            base.visit(vd);
        }
 private bool IsVariableAlreadyDefined(string name)
 {
     if (UpperBlockNames.Contains(name))
     {
         return(true);
     }
     for (int i = 0; i <= CurrentLevel; ++i)
     {
         if (BlockNamesStack[i].Contains(name))
         {
             return(true);
         }
     }
     return(false);
 }