void ResetTagBuffer() { if (_TagBuffer != null) { _TagBuffer.Dispose(); } _TagBuffer = null; }
/// <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; }
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); }
/// <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); }
/// <summary> /// Remove a buffer /// </summary> internal void UnregisterBuffer(ParseBuffer parseBuffer) { if (_RegisteredBuffers != null) { _RegisteredBuffers.Remove(parseBuffer); if (_RegisteredBuffers.Count == 0) { _RegisteredBuffers = null; } } }
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 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]); }
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); }
/// <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) { }
/// <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; }
/// <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) { }
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) { }
/// <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); }
/// <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) { }