Example #1
0
 void ResetTagBuffer()
 {
     if (_TagBuffer != null)
     {
         _TagBuffer.Dispose();
     }
     _TagBuffer = null;
 }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the JsonParserBase class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 protected JsonParserBase(ParseBuffer buffer)
 {
     if (ReferenceEquals(buffer, null))
     {
         throw new ArgumentNullException("buffer");
     }
     this.Buffer        = buffer;
     this.startLocation = buffer.Location;
 }
 /// <summary>
 /// Initializes a new instance of the JsonParserBase class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 protected JsonParserBase(ParseBuffer buffer)
 {
     if (ReferenceEquals(buffer, null))
     {
         throw new ArgumentNullException("buffer");
     }
     this.Buffer = buffer;
     this.startLocation = buffer.Location;
 }
Example #4
0
        public void BoolParsesTrue()
        {
            var buffer = new ParseBuffer(@"true", 0);
            var ret    = LangParser.Boolean(buffer);

            Assert.IsTrue(ret.IsSuccessful);

            Assert.IsTrue(ret.Result != null);   // TODO replace with not null assert method
            Assert.IsTrue(ret.Result.Value);
        }
Example #5
0
            /// <summary>
            /// Open a new buffer
            /// </summary>
            public ParseBuffer OpenBuffer()
            {
                ParseBuffer result = new ParseBuffer(this);

                if (_RegisteredBuffers == null)
                {
                    _RegisteredBuffers = new List <ParseBuffer>();
                }
                _RegisteredBuffers.Add(result);
                return(result);
            }
Example #6
0
 /// <summary>
 /// Remove a buffer
 /// </summary>
 internal void UnregisterBuffer(ParseBuffer parseBuffer)
 {
     if (_RegisteredBuffers != null)
     {
         _RegisteredBuffers.Remove(parseBuffer);
         if (_RegisteredBuffers.Count == 0)
         {
             _RegisteredBuffers = null;
         }
     }
 }
Example #7
0
 public void WhenIParseTheContentAsAJsonString(string type)
 {
     this.buffer = new ParseBuffer(this.jsonContent);
     if (type == "string")
     {
         this.jsonItem = new JsonStringParser(buffer).ParseNext();
     }
     else if (type == "number")
     {
         this.jsonItem = new JsonNumberParser(buffer).ParseNext();
     }
     else if (type == "boolean")
     {
         this.jsonItem = new JsonBooleanParser(buffer).ParseNext();
     }
     else if (type == "null")
     {
         this.jsonItem = new JsonNullParser(buffer).ParseNext();
     }
     else
     {
         Assert.Fail("unknown parser type.");
     }
 }
 public void WhenIParseTheContentAsAJsonString(string type)
 {
     this.buffer = new ParseBuffer(this.jsonContent);
     if (type == "string")
     {
         this.jsonItem = new JsonStringParser(buffer).ParseNext();
     }
     else if (type == "number")
     {
         this.jsonItem = new JsonNumberParser(buffer).ParseNext();
     }
     else if (type == "boolean")
     {
         this.jsonItem = new JsonBooleanParser(buffer).ParseNext();
     }
     else if (type == "null")
     {
         this.jsonItem = new JsonNullParser(buffer).ParseNext();
     }
     else
     {
         Assert.Fail("unknown parser type.");
     }
 }
Example #9
0
        public void CanPopulateParseBuffer()
        {
            using var file = File.OpenRead(@"Data\ZORK1.DAT");
            var logger  = NullLoggerFactory.GetLogger();
            var machine = new Machine(logger, new SolveZorkInputStream());

            machine.Load(file);

            var textBytes = new byte[37];

            textBytes[0] = (byte)textBytes.Length;

            var textMemory = new MemoryLocation(1, textBytes.AsMemory());
            var textBuffer = new TextBuffer(textMemory);

            textBuffer.Write("open mailbox");

            var dictionary = new ParseDictionary(machine);

            textBuffer.Tokenize(dictionary);

            var parseBytes = new byte[128];

            parseBytes[0] = (byte)parseBytes.Length;

            var parseMemory = new MemoryLocation(1, parseBytes.AsMemory());
            var parseBuffer = new ParseBuffer(parseMemory);

            parseBuffer.Populate(textBuffer, dictionary);

            Assert.Equal(2, parseBytes[0]);
            Assert.Equal(0x46, parseBytes[1]);
            Assert.Equal(0x88, parseBytes[2]);
            Assert.Equal(0x04, parseBytes[3]);
            Assert.Equal(0x01, parseBytes[4]);
        }
Example #10
0
        public void Read(SpanLocation location)
        {
            if (machine.Version > 0x03)
            {
                throw new NotImplementedException("Not for v3+ yet");
            }

            var textBufferAddress  = Operands[0].Value;
            var parseBufferAddress = Operands[1].Value;


            var textBuffer  = new TextBuffer(machine.Memory.MemoryAt(textBufferAddress));
            var parseBuffer = new ParseBuffer(machine.Memory.MemoryAt(parseBufferAddress));
            var dictionary  = machine.GetDictionary();

            var input = machine.Input.Read();

            textBuffer.Write(input);
            textBuffer.Tokenize(dictionary);
            parseBuffer.Populate(textBuffer, dictionary);

            log.Verbose($"Read OP");
            machine.SetPC(location.Address + Size);
        }
Example #11
0
 /// <summary>
 /// Initializes a new instance of the JsonBooleanParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonBooleanParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonBooleanParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonBooleanParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonObjectParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonObjectParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonStringParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonStringParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonNumberParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonNumberParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
Example #16
0
 /// <summary>
 /// Initializes a new instance of the JsonWhiteSpaceParser class.
 /// </summary>
 /// <param name="parseType">
 /// The type of object that was being parsed.
 /// </param>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonWhiteSpaceParser(JsonParseType parseType, ParseBuffer buffer)
     : base(buffer)
 {
     this.parseType = parseType;
 }
Example #17
0
 /// <summary>
 /// Initializes a new instance of the JsonNullParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonNullParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonWhiteSpaceParser class.
 /// </summary>
 /// <param name="parseType">
 /// The type of object that was being parsed.
 /// </param>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonWhiteSpaceParser(JsonParseType parseType, ParseBuffer buffer)
     : base(buffer)
 {
     this.parseType = parseType;
 }
Example #19
0
 /// <summary>
 /// Initializes a new instance of the JsonObjectParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonObjectParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
Example #20
0
 /// <summary>
 /// Initializes a new instance of the JsonNumberParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonNumberParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonNullParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonNullParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
Example #22
0
 private JsonParser(ParseBuffer buffer) : base(buffer)
 {
 }
Example #23
0
 private JsonParser(ParseBuffer buffer) : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonArrayParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonArrayParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
Example #25
0
        /// <summary>
        /// Parse a start tag
        /// </summary>
        protected ParsedToken ParseStartTag()
        {
            _StartTagPosition = _CurrentPosition;
            _TagBuffer        = SourceReader.OpenBuffer();
            CharInfo c = ReadChar();

            // Comments ?
            if (c == '!')
            {
                // Expect '--' or 'DOCTYPE'
                c = ReadChar();
                if (Char.IsLetter(c.AsChar))
                {
                    SaveChar(c);
                    return(ParseDoctype());
                }
                else if (c == '-')
                {
                    if (ReadChar() != '-')
                    {
                        throw new ParseError("Comments need to start with '<!--'.", ReadPosition);
                    }
                    return(ParseComment());
                }
                throw new ParseError("Comment or DOCTYPE expected.", ReadPosition);
            }
            // Process instruction ?
            if (c == '?')
            {
                _State = ParseState.ProcessInstruction;
                c      = ReadChar(false);
                // Pass whitespace
                while (c != CharInfo.EOF && Char.IsWhiteSpace(c.AsChar))
                {
                    c = ReadChar(false);
                }
            }
            else if (c == '/')
            {
                _State = ParseState.EndTag;
                c      = ReadChar(false);
                if (c == CharInfo.EOF || !Char.IsLetterOrDigit(c.AsChar))
                {
                    SaveChar(c);
                    throw new ParseError("Invalid tag name. Need to start with an alphanumeric", ReadPosition);
                }
            }
            else
            {
                _State = ParseState.Tag;
            }
            // Tagname
            if (c == CharInfo.EOF || !Char.IsLetterOrDigit(c.AsChar))
            {
                throw new ParseError("Invalid tag name. Need to start with an alphanumeric", ReadPosition);
            }
            // Loop tag name
            _CurrentRead = null;
            AddToCurrentRead(c);
            while ((c = ReadChar(false)) != CharInfo.EOF && (Char.IsLetterOrDigit(c.AsChar) || c == '.' || c == ':' || c == '-'))
            {
                AddToCurrentRead(c);
            }
            // If EndTag
            if (_State == ParseState.EndTag)
            {
                _CurrentToken          = ParsedTag.EndTag(GetCurrentRead(true));
                _CurrentToken.Position = _StartTagPosition;

                // Pass whitespace
                while (c != CharInfo.EOF && Char.IsWhiteSpace(c.AsChar))
                {
                    c = ReadChar(false);
                }
                try
                {
                    if (c == CharInfo.EOF)
                    {
                        throw new ParseError("Unexpected end of stream.", ReadPosition);
                    }
                    if (IsAttributeNameChar(c.AsChar))
                    {
                        throw new ParseError("End tag can't contains attribute.", ReadPosition);
                    }
                    if (c != '>')
                    {
                        throw new ParseError("Unexpected char. End tag not closed.", ReadPosition);
                    }
                }
                catch
                {
                    // Reset steam
                    while (c != CharInfo.EOF && c != '<' && c != '>')
                    {
                        c = ReadChar(false);
                    }
                    if (c == '<')
                    {
                        SaveChar(c);
                    }
                    throw;
                }
                _State = ParseState.Content;
                ResetTagBuffer();
                var result = _CurrentToken;
                _CurrentToken = null;
                return(result);
            }
            // Create the tag
            if (c != CharInfo.EOF)
            {
                SaveChar(c);
            }
            _CurrentToken          = _State == ParseState.Tag ? ParsedTag.OpenTag(GetCurrentRead(true)) : ParsedTag.OpenProcessInstruction(GetCurrentRead(true));
            _CurrentToken.Position = _StartTagPosition;
            return(_CurrentToken);
        }
Example #26
0
 /// <summary>
 /// Initializes a new instance of the JsonValueParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonValueParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
 /// <summary>
 /// Initializes a new instance of the JsonValueParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonValueParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
Example #28
0
 /// <summary>
 /// Initializes a new instance of the JsonArrayParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonArrayParser(ParseBuffer buffer)
     : base(buffer)
 {
 }
Example #29
0
 /// <summary>
 /// Initializes a new instance of the JsonStringParser class.
 /// </summary>
 /// <param name="buffer">
 /// The parser buffer used to conduct parsing.
 /// </param>
 public JsonStringParser(ParseBuffer buffer)
     : base(buffer)
 {
 }