예제 #1
0
        //private SyntaxTree.uses_list CreateStandartUsesList()
        //{
        //    uses_list res = new uses_list();
        //    unit_or_namespace pabcsystem = new unit_or_namespace();
        //    pabcsystem.name = new ident_list("PABCSystem");
        //    res.units.Add(pabcsystem);
        //    return res;
        //}

        public procedure_call CreateProcedureCall(string procName, params expression[] exprList)
        {
            SyntaxTree.procedure_call pc = new SyntaxTree.procedure_call();
            SyntaxTree.method_call    mc = new SyntaxTree.method_call();
            mc.dereferencing_value = new ident(procName);
            pc.func_name           = mc;
            SyntaxTree.expression_list exl = new PascalABCCompiler.SyntaxTree.expression_list();
            foreach (expression x in exprList)
            {
                exl.Add(x);
            }
            mc.parameters = exl;
            return(pc);
        }
 public override void visit(matching_expression _matching_expression)
 {
     SyntaxTree.procedure_call pc = new SyntaxTree.procedure_call();
     SyntaxTree.method_call mc = new SyntaxTree.method_call();
     dot_node dot = new dot_node(new ident("PABCSystem"), new ident("KV"));
     mc.dereferencing_value = dot;
     pc.func_name = mc;
     pc.source_context = _matching_expression.source_context;
     SyntaxTree.expression_list exl = new PascalABCCompiler.SyntaxTree.expression_list();
     exl.Add(_matching_expression.left);
     exl.Add(_matching_expression.right);
     mc.parameters = exl;
     visit(pc);
 }
 private SyntaxTree.procedure_call ConvertOperatorToProcedureCall(SyntaxTree.assign _assign)
 {
     SyntaxTree.ident operator_name = new PascalABCCompiler.SyntaxTree.ident(name_reflector.get_name(_assign.operator_type));
     operator_name.source_context = _assign.to.source_context;
     SyntaxTree.dot_node dot = new PascalABCCompiler.SyntaxTree.dot_node(_assign.to, operator_name);
     dot.source_context = _assign.to.source_context;
     SyntaxTree.expression_list exprlist = new SyntaxTree.expression_list();
     exprlist.expressions.Add(_assign.from);
     exprlist.source_context = _assign.to.source_context;
     SyntaxTree.method_call add_methcall = new SyntaxTree.method_call(exprlist);
     add_methcall.dereferencing_value = dot;
     add_methcall.source_context = _assign.source_context;
     SyntaxTree.procedure_call add_proccall = new SyntaxTree.procedure_call(add_methcall);
     add_proccall.source_context = _assign.source_context;
     return add_proccall;
 }
 private SyntaxTree.procedure_call ConvertEventOperationToProcedureCall(SyntaxTree.assign _assign)
 {
     SyntaxTree.ident event_name = _assign.to as SyntaxTree.ident;
     SyntaxTree.dot_node dot = _assign.to as SyntaxTree.dot_node;
     if (dot != null)
         event_name = dot.right as SyntaxTree.ident;
     if (event_name == null)
         AddError(new EventNameExpected(get_location(_assign.to)));
     string format;
     if (_assign.operator_type == PascalABCCompiler.SyntaxTree.Operators.AssignmentSubtraction)
         format = compiler_string_consts.event_remove_method_nameformat;
     else
         format = compiler_string_consts.event_add_method_nameformat;
     SyntaxTree.ident add_name = new SyntaxTree.ident(string.Format(format, event_name.name));
     add_name.source_context = event_name.source_context;
     if (dot != null)
         dot.right = add_name;
     SyntaxTree.expression_list exprlist = new SyntaxTree.expression_list();
     exprlist.expressions.Add(_assign.from);
     exprlist.source_context = _assign.to.source_context;
     SyntaxTree.method_call add_methcall = new SyntaxTree.method_call(exprlist);
     if (dot != null)
         add_methcall.dereferencing_value = dot;
     else
         add_methcall.dereferencing_value = add_name;
     add_methcall.source_context = _assign.source_context;
     SyntaxTree.procedure_call add_proccall = new SyntaxTree.procedure_call(add_methcall);
     add_proccall.source_context = _assign.source_context;
     return add_proccall;
 }
예제 #5
0
 public static procedure_call CreateProcedureCall(string procName, params expression[] exprList)
 {
     SyntaxTree.procedure_call pc = new SyntaxTree.procedure_call();
     pc.func_name = CreateMethodCall(procName, exprList);
     return(pc);
 }
예제 #6
0
        //private SyntaxTree.uses_list CreateStandartUsesList()
        //{
        //    uses_list res = new uses_list();
        //    unit_or_namespace pabcsystem = new unit_or_namespace();
        //    pabcsystem.name = new ident_list("PABCSystem");
        //    res.units.Add(pabcsystem);
        //    return res;
        //}

        public procedure_call CreateProcedureCall(string procName, params expression[] exprList)
        {
            SyntaxTree.procedure_call pc = new SyntaxTree.procedure_call();
            SyntaxTree.method_call mc = new SyntaxTree.method_call();
            mc.dereferencing_value = new ident(procName);
            pc.func_name = mc;
            SyntaxTree.expression_list exl = new PascalABCCompiler.SyntaxTree.expression_list();
            foreach (expression x in exprList)
                exl.Add(x);
            mc.parameters = exl;
            return pc;
        }