Beispiel #1
0
        void CompileSexpr(SexprNode sexpr, NodeListParser nlp)
        {
            Logger.WriteLine(4, "CompileSexpr {0} <{1}>", sexpr, nlp);

            var snlp = NodeListParser.Create(sexpr.Args, Symbols);

            _currentparser = snlp;

            // intrinsics with individual parser and code generator
            if (sexpr.Sym.IsControl)
            {
                if (_controllookup.ContainsKey(sexpr.Sym.Keyword))
                {
                    _controllookup[sexpr.Sym.Keyword](sexpr.Sym, snlp, this);
                }
                else
                {
                    nlp.Unexpected("unknown control function");
                }
            }
            else
            {
                CompileBuiltin(sexpr.Sym as BuiltinSymbol, snlp);
            }
        }
Beispiel #2
0
 // Parse list or single atom as Sexpr
 internal SexprNode GetSexprNode()
 {
     Expect(IsCallable, "Callable");
     if (IsList)
     {
         var nlp = GetParser();
         return(SexprNode.Create(nlp.GetIdent().Sym, nlp.GetTail()));
     }
     else
     {
         return(SexprNode.Create(GetIdent().Sym, new List <Node>()));
     }
 }