예제 #1
0
 /// <summary>
 /// Loads a Monkeyspeak script from a file into a <see cref="Monkeyspeak.Page"/>.
 /// </summary>
 /// <param name="filePath">the file path to the script</param>
 /// <returns></returns>
 /// <exception cref="System.IO.IOException"></exception>
 public Page LoadFromFile(string filePath)
 {
     if (!File.Exists(filePath))
     {
         // small fix for NUnit cases where the path is a temp location, also useful when passing simple file names to this method
         var path = Path.GetDirectoryName(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly()?.CodeBase).Path));
         path = Path.Combine(path, filePath);
         if (File.Exists(path))
         {
             filePath = path;
         }
         else
         {
             throw new IOException($"{path} does not exist");
         }
     }
     using (var reader = new SStreamReader(filePath))
     {
         Page page = new Page(this);
         using (var lexer = new Lexer(this, reader))
         {
             page.VisitingToken = VisitTokens;
             page.GenerateBlocks(lexer);
             page.VisitingToken = null;
         }
         return(page);
     }
 }
예제 #2
0
 /// <summary>
 /// Loads a Monkeyspeak script from a string into a <see cref="Monkeyspeak.Page"/>.
 /// </summary>
 /// <param name="chunk">String that contains the Monkeyspeak script source.</param>
 /// <returns></returns>
 public Page LoadFromString(string chunk)
 {
     if (string.IsNullOrWhiteSpace(chunk))
     {
         throw new NullReferenceException("chunk");
     }
     try
     {
         var stream = new MemoryStream(Encoding.UTF8.GetBytes(chunk));
         using (var reader = new SStreamReader(stream, Encoding.UTF8))
         {
             Page page = new Page(this);
             using (var lexer = new Lexer(this, reader))
             {
                 page.VisitingToken = VisitTokens;
                 page.GenerateBlocks(lexer);
                 page.VisitingToken = null;
             }
             return(page);
         }
     }
     catch (Exception ex)
     {
         Logger.Debug <MonkeyspeakEngine>(ex);
         throw;
     }
 }
예제 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Lexer"/> class.
 /// </summary>
 /// <param name="engine">The engine.</param>
 /// <param name="reader">The reader.</param>
 public Lexer(MonkeyspeakEngine engine, SStreamReader reader)
     : base(engine, reader)
 {
     varDeclSym     = engine.Options.VariableDeclarationSymbol;
     stringBeginSym = engine.Options.StringBeginSymbol;
     stringEndSym   = engine.Options.StringEndSymbol;
     lineCommentSym = engine.Options.LineCommentSymbol;
 }
예제 #4
0
 /// <summary>
 /// Loads a Monkeyspeak script from a Stream into <paramref name="existingPage"/>.
 /// </summary>
 /// <param name="existingPage">Reference to an existing Page</param>
 /// <param name="stream">Stream that contains the Monkeyspeak script. Closes the stream.</param>
 public void LoadFromStream(Page existingPage, Stream stream)
 {
     try
     {
         using (var reader = new SStreamReader(stream, true))
         {
             using (var lexer = new Lexer(this, reader))
             {
                 existingPage.VisitingToken = VisitTokens;
                 existingPage.GenerateBlocks(lexer);
                 existingPage.VisitingToken = null;
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Debug <MonkeyspeakEngine>(ex);
     }
 }
예제 #5
0
 /// <summary>
 /// Loads a Monkeyspeak script from a string into <paramref name="existingPage"/>. and
 /// clears the old page
 /// </summary>
 /// <param name="existingPage">Reference to an existing Page</param>
 /// <param name="chunk">String that contains the Monkeyspeak script source.</param>
 /// <returns></returns>
 public void LoadFromString(Page existingPage, string chunk)
 {
     try
     {
         var stream = new MemoryStream(Encoding.UTF8.GetBytes(chunk));
         using (var reader = new SStreamReader(stream, Encoding.UTF8))
         {
             using (var lexer = new Lexer(this, reader))
             {
                 existingPage.VisitingToken = VisitTokens;
                 existingPage.GenerateBlocks(lexer);
                 existingPage.VisitingToken = null;
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Debug <MonkeyspeakEngine>(ex);
     }
 }
예제 #6
0
 /// <summary>
 /// Loads a Monkeyspeak script from a Stream into a <see cref="Monkeyspeak.Page"/>.
 /// </summary>
 /// <param name="stream">Stream that contains the Monkeyspeak script. Closes the stream.</param>
 /// <returns><see cref="Monkeyspeak.Page"/></returns>
 public Page LoadFromStream(Stream stream)
 {
     try
     {
         using (var reader = new SStreamReader(stream, true))
         {
             Page page = new Page(this);
             using (var lexer = new Lexer(this, reader))
             {
                 page.VisitingToken = VisitTokens;
                 page.GenerateBlocks(lexer);
                 page.VisitingToken = null;
             }
             return(page);
         }
     }
     catch (Exception ex)
     {
         Logger.Debug <MonkeyspeakEngine>(ex);
     }
     return(new Page(this)); // return a empty page so that the top level caller is not destroyed by nullreference exceptions :)
 }
 protected AbstractLexer(MonkeyspeakEngine engine, SStreamReader reader)
 {
     this.reader = reader;
     Engine      = engine;
 }