public void visit(semantic_check _semantic_check)
		{
			bw.Write((Int16)188);
			write_semantic_check(_semantic_check);
		}
		public void write_semantic_check(semantic_check _semantic_check)
		{
			write_statement(_semantic_check);
			if (_semantic_check.CheckName == null)
			{
				bw.Write((byte)0);
			}
			else
			{
				bw.Write((byte)1);
				bw.Write(_semantic_check.CheckName);
			}
			if (_semantic_check.param == null)
			{
				bw.Write((byte)0);
			}
			else
			{
				bw.Write((byte)1);
				bw.Write(_semantic_check.param.Count);
				for(Int32 ssyy_i = 0; ssyy_i < _semantic_check.param.Count; ssyy_i++)
				{
					if (_semantic_check.param[ssyy_i] == null)
					{
						bw.Write((byte)0);
					}
					else
					{
						bw.Write((byte)1);
						_semantic_check.param[ssyy_i].visit(this);
					}
				}
			}
			bw.Write((byte)_semantic_check.fictive);
		}
示例#3
0
 public override void visit(semantic_check _semantic_check)
 {
 }
        public statement MyStmt(expression ex, statement st)
        {
            // Проверить, что в ex - целый тип
            // Сделать специальный узел для проверки new semantic_check("Тип проверки",params syntax_node[] ob)
            // Включать этот узел первым для "сахарных" узлов синтаксического дерева
            var sc = new semantic_check("ExprIsInteger", ex);

            var id = new ident("#my");
            var idlist = new ident_list(id);
            var typ = new named_type_reference("integer");
            var one = new int32_const(1);
            var vdef = new var_def_statement(idlist, typ, one, definition_attribute.None, false, null);
            var vstat = new var_statement(vdef, null);

            var ass = new assign(new ident("#my"), one, Operators.AssignmentAddition);
            var stlistwhile = new statement_list(st);
            stlistwhile.Add(ass);

            var bin = new bin_expr(id, ex, Operators.LessEqual);

            var wh = new while_node(bin, stlistwhile, WhileCycleType.While);

            var stlist = new statement_list(sc);
            stlist.Add(vstat);
            stlist.Add(wh);
            return stlist;
        }
		public void read_semantic_check(semantic_check _semantic_check)
		{
			read_statement(_semantic_check);
			if (br.ReadByte() == 0)
			{
				_semantic_check.CheckName = null;
			}
			else
			{
				_semantic_check.CheckName = br.ReadString();
			}
			if (br.ReadByte() == 0)
			{
				_semantic_check.param = null;
			}
			else
			{
				_semantic_check.param = new List<syntax_tree_node>();
				Int32 ssyy_count = br.ReadInt32();
				for(Int32 ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++)
				{
					_semantic_check.param.Add(_read_node() as syntax_tree_node);
				}
			}
			_semantic_check.fictive = (int)br.ReadByte();
		}
		public void visit(semantic_check _semantic_check)
		{
			read_semantic_check(_semantic_check);
		}
 public override void visit(semantic_check _semantic_check)
 {
     throw new NotImplementedException();
 }