Пример #1
0
        /// <summary>
        /// To be executed before the visit starts
        /// </summary>
        public void PreVisit(Parse.Parser parser)
        {
            _parser = parser;

            // if this document is in the Saved parsed visitors, we remove it now and we will add it back when it is parsed
            if (_isBaseFile)
            {
                if (SavedPersistent.ContainsKey(_parser.FilePathBeingParsed))
                {
                    SavedPersistent.Remove(_parser.FilePathBeingParsed);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// To be executed after the visit ends
        /// </summary>
        public void PostVisit()
        {
            // save the info for uses in an another file, where this file is run in persistent
            if (!SavedPersistent.ContainsKey(_parser.FilePathBeingParsed))
            {
                SavedPersistent.Add(_parser.FilePathBeingParsed, this);
            }
            else
            {
                SavedPersistent[_parser.FilePathBeingParsed] = this;
            }

            // lose parser reference
            _parser = null;
        }
Пример #3
0
        /// <summary>
        /// Parses a file.
        /// Remarks : it doesn't parse the document against known words since this is only useful for
        /// the CURRENT document and not for the others
        /// </summary>
        private static ParserVisitor ParseFile(string filePath, ParsedScopeBlock scopeItem)
        {
            ParserVisitor parserVisitor;

            // did we already parsed this file in a previous parse session? (if we are in CodeExplorerDisplayExternalItems mode we need to parse it again anyway)
            if (SavedPersistent.ContainsKey(filePath))
            {
                parserVisitor = SavedPersistent[filePath];
            }
            else
            {
                // Parse it
                var ablParser = new Parse.Parser(Utils.ReadAllText(filePath), filePath, scopeItem, false);
                parserVisitor = new ParserVisitor(false);
                ablParser.Accept(parserVisitor);
            }

            return(parserVisitor);
        }
Пример #4
0
 //if arg's length = 1
 private Node apply1(Node arg1)
 {
     string name = this.symbol.getName();
     bool flag = name.Equals("car");
     Node result;
     if (flag)
     {
         result = arg1.getCar();
     }//end if
     else
     {
         bool flag2 = name.Equals("cdr");
         if (flag2)
         {
             result = arg1.getCdr();
         }//end if
         else
         {
             bool flag3 = name.Equals("number?");
             if (flag3)
             {
                 result = BoolLit.getInstance(arg1.isNumber());
             }//end if
             else
             {
                 bool flag4 = name.Equals("symbol?");
                 if (flag4)
                 {
                     result = BoolLit.getInstance(arg1.isSymbol());
                 }//end if
                 else
                 {
                     bool flag5 = name.Equals("null?");
                     if (flag5)
                     {
                         result = BoolLit.getInstance(arg1.isNull());
                     }//end if
                     else
                     {
                         bool flag6 = name.Equals("pair?");
                         if (flag6)
                         {
                             result = BoolLit.getInstance(arg1.isPair());
                         }//end if
                         else
                         {
                             bool flag7 = name.Equals("procedure?");
                             if (flag7)
                             {
                                 result = BoolLit.getInstance(arg1.isProcedure());
                             }//end if
                             else
                             {
                                 bool flag8 = name.Equals("write");// i am not sure if im handling this correctly
                                 if (flag8)
                                 {
                                     arg1.print(-1);
                                     result = Unspecific.getInstance();
                                 }//end if
                                 else
                                 {
                                     bool flag9 = name.Equals("display"); // i am not sure if im handling this correctly
                                     if (flag9)
                                     {
                                         StringLit.printDoubleQuotes = false;
                                         arg1.print(-1);
                                         StringLit.printDoubleQuotes = true;
                                         result = Unspecific.getInstance();
                                     }//end if
                                     else
                                     {
                                         bool flag10 = name.Equals("load");
                                         if (flag10)
                                         {
                                             bool flag11 = !arg1.isString();
                                             if (flag11)
                                             {
                                                 Console.Error.WriteLine("Error: wrong type of argument");
                                                 result = Nil.getInstance();
                                             }
                                             else
                                             {
                                                 string stringVal = arg1.getStringVal();
                                                 try
                                                 {
                                                     //not sure why it has to be Parse.Scanner to call this
                                                     Parse.Scanner s = new Parse.Scanner(File.OpenText(stringVal));
                                                     TreeBuilder b = new TreeBuilder();
                                                     Parse.Parser parser = new Parse.Parser(s, b);
                                                     for (Node node = (Node)parser.parseExp(); node != null; node = (Node)parser.parseExp())
                                                     {
                                                         node.eval(Scheme4101.env);
                                                     }
                                                 }
                                                 catch (SystemException)
                                                 {
                                                     Console.Error.WriteLine("Could not find file " + stringVal);
                                                 }
                                                 result = Unspecific.getInstance();
                                             }
                                         }//end if
                                         else
                                         {
                                             Console.Error.WriteLine("Error: wrong number of arguments");
                                             result = Nil.getInstance();
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }//end inner sub sub sub else
             }//end inner sub sub else
         }//end inner sub else
     }//end outer else
     return result;
 }
Пример #5
0
 //if arg length = 0
 private Node apply0()
 {
     string name = this.symbol.getName();
     bool flag = name.Equals("read");
     Node result;
     if (flag)
     {
         Parse.Scanner s = new Parse.Scanner(Console.In);
         Parse.Parser parser = new Parse.Parser(s, new TreeBuilder());
         Node node = (Node)parser.parseExp();
         bool flag2 = node != null;
         if (flag2)
         {
             result = node;
         }
         else
         {
             result = new Ident("end-of-file");
         }
     }//end outer if
     else
     {
         bool flag3 = name.Equals("newline");
         if (flag3)
         {
             Console.WriteLine();
             result = Unspecific.getInstance();
         }
         else
         {
             bool flag4 = name.Equals("interaction-environment");
             if (flag4)
             {
                 result = Scheme4101.env;
             }
             else
             {
                 Console.Error.WriteLine("Error: wrong number of arguments");
                 result = Nil.getInstance();
             }
         }
     }//end outer else
     return result;
 }
Пример #6
0
        private void DefinePrimitives(Environment env)
        {
            foreach (KeyValuePair<string, Primitive> kvp in PrimitiveFactory.Primitives)
            {
                ScheminAtom symbol = new ScheminAtom(kvp.Key);
                ScheminPrimitive prim = new ScheminPrimitive(kvp.Key);

                env.AddBinding(symbol, prim);
            }

            var prebound_schemin = new List<string>();
            prebound_schemin.Add(ScheminPrimitives.Map);
            prebound_schemin.Add(ScheminPrimitives.Filter);
            prebound_schemin.Add(ScheminPrimitives.Foldl);
            prebound_schemin.Add(ScheminPrimitives.Foldr);
            prebound_schemin.Add(ScheminPrimitives.Not);
            prebound_schemin.Add(ScheminPrimitives.Id);
            prebound_schemin.Add(ScheminPrimitives.Flip);
            prebound_schemin.Add(ScheminPrimitives.Fold);
            prebound_schemin.Add(ScheminPrimitives.Unfold);
            prebound_schemin.Add(ScheminPrimitives.Reverse);
            prebound_schemin.Add(ScheminPrimitives.Curry);
            prebound_schemin.Add(ScheminPrimitives.Compose);
            prebound_schemin.Add(ScheminPrimitives.Zero);
            prebound_schemin.Add(ScheminPrimitives.Positive);
            prebound_schemin.Add(ScheminPrimitives.Negative);
            prebound_schemin.Add(ScheminPrimitives.Odd);
            prebound_schemin.Add(ScheminPrimitives.Even);
            prebound_schemin.Add(ScheminPrimitives.CallWithCC);
            prebound_schemin.Add(ScheminPrimitives.Error);
            prebound_schemin.Add(ScheminPrimitives.Sum);
            prebound_schemin.Add(ScheminPrimitives.Product);
            prebound_schemin.Add(ScheminPrimitives.Max);
            prebound_schemin.Add(ScheminPrimitives.Min);
            prebound_schemin.Add(ScheminPrimitives.Caddr);
            prebound_schemin.Add(ScheminPrimitives.DefineMacro);

            Tokenize.Tokenizer t = new Tokenize.Tokenizer();
            Schemin.Parse.Parser p = new Parse.Parser();

            foreach (string primitive in prebound_schemin)
            {
                var tokens = t.Tokenize(primitive);
                var ast = p.Parse(tokens, false);
                Evaluate(ast);
            }
        }