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 virtual void visit(semantic_check _semantic_check) { DefaultVisit(_semantic_check); }
public override void visit(semantic_check _semantic_check) { throw new NotImplementedException(); }
public virtual void post_do_visit(semantic_check _semantic_check) { }
public override void visit(semantic_check _semantic_check) { DefaultVisit(_semantic_check); pre_do_visit(_semantic_check); for (int i = 0; i < param.Count; i++) visit(semantic_check.param[i]); post_do_visit(_semantic_check); }
public virtual void visit(semantic_check _semantic_check) { }
public override void visit(semantic_check _semantic_check) { }
public override void visit(semantic_check _semantic_check) { executer.visit(_semantic_check); if (_semantic_check.param != null) foreach (dynamic x in _semantic_check.param) if(x != null) this.visit(x); if (_semantic_check.attributes != null) this.visit((dynamic)_semantic_check.attributes); }