示例#1
0
        public static List <Type> GetImports(BRAQParser.ProgramContext context)
        {
            var visitor = new ImportVisitor();

            context.Accept(visitor);
            return(visitor._imported_names);
        }
示例#2
0
        solveTypes(BRAQParser.ProgramContext context,
                   Dictionary <BRAQParser.Function_def_stmtContext, AssignCheckVisitor.AssignCheckResult> step1_result,
                   List <Type> imported_names)
        {
            var answ           = new Dictionary <BRAQParser.Function_def_stmtContext, TyperResult>();
            var user_functions = new List <OwnMethodInfo>();

            //function signatures
            foreach (var fdef in step1_result)
            {
                var tr = new TyperResult(fdef.Value.token_to_def, fdef.Value.token_to_arg.Keys.ToList());

                tr.methodInfo = new OwnMethodInfo(
                    fdef.Key.id_name.Text,
                    fdef.Key.typed_id().Select(x => new Pair <string, Type>(x.id_name.Text, string_to_type(x.type_name.Text, imported_names))).ToList(),
                    fdef.Key.of_type != null ? string_to_type(fdef.Key.of_type.Text, imported_names): typeof(void),
                    fdef.Key
                    );

                user_functions.Add(tr.methodInfo);

                tr.argtypes = tr.methodInfo.arguments.ToDictionary(x => x.a, x => x.b);

                tr.argvars = fdef.Value.token_to_arg.Keys.ToList();

                answ[fdef.Key] = tr;
            }

            foreach (var fdef in step1_result)
            {
                var v = new TyperVisitor(answ[fdef.Key], fdef.Value.def_to_assign, user_functions);
                v.imported_names = imported_names;
                fdef.Key.Accept(v);
            }

            return(answ);
        }
示例#3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="BRAQParser.program"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitProgram([NotNull] BRAQParser.ProgramContext context)
 {
     return(VisitChildren(context));
 }
示例#4
0
 public override int VisitProgram(BRAQParser.ProgramContext context)
 {
     context.imports().ToList().ForEach(x => x.Accept(this));
     return(0);
 }
示例#5
0
 public static void runChecks(BRAQParser.ProgramContext context)
 {
     context.Accept(new BreakContinueChecker());
 }
示例#6
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="BRAQParser.program"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitProgram([NotNull] BRAQParser.ProgramContext context)
 {
 }