Exemple #1
0
        public ProcessResult TryProcess(TextReader input, XmlWriter output, XmlResolver resolver)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }
            if (output == null)
            {
                throw new ArgumentNullException("output");
            }
            LalrProcessor parser  = new LalrProcessor(new Tokenizer(input, grammar));
            ParseMessage  message = parser.Parse();

            while (CompiledGrammar.CanContinueParsing(message))
            {
                message = parser.Parse();
            }
            LineInfo position = default(LineInfo);

            if (parser.CurrentToken != null)
            {
                position = parser.CurrentToken.Position;
            }
            switch (message)
            {
            case ParseMessage.Accept:
                break;

            case ParseMessage.LexicalError:
                return(new ProcessResult(position, string.Format("Lexical error: {0}", parser.CurrentToken)));

            case ParseMessage.SyntaxError:
                StringBuilder result = new StringBuilder("Syntax error:");
                foreach (Symbol expectedSymbol in parser.GetExpectedTokens())
                {
                    result.Append(' ');
                    result.Append(expectedSymbol.Name);
                }
                result.Append(" expected");
                return(new ProcessResult(position, result.ToString()));

            case ParseMessage.CommentError:
                return(new ProcessResult(position, "End of block comment not found"));

            default:             // includes InternalError
                return(new ProcessResult(position, "Internal error"));
            }
            StringBuilder    xsltError = new StringBuilder();
            XsltArgumentList arguments = new XsltArgumentList();

            arguments.XsltMessageEncountered += ((sender, args) => xsltError.Append(args.Message));
            using (XmlReader reader = new TokenXmlReader(nametable, parser.CurrentToken)) {
                transform.Transform(reader, arguments, output, resolver);
            }
            if (xsltError.Length > 0)
            {
                return(new ProcessResult(default(LineInfo), xsltError.ToString()));
            }
            return(new ProcessResult());
        }
		public void ParseAll() {
			using (TestStringReader reader = CgtTokenizerTest.GetReader()) {
				Tokenizer tokenizer = new Tokenizer(reader, grammar);
				LalrProcessor processor = new LalrProcessor(tokenizer, true);
				Assert.Equal(ParseMessage.Accept, processor.ParseAll());
				Assert.Equal("Expression", processor.CurrentToken.Symbol.Name);
				Assert.Equal(27, CountTokens(processor.CurrentToken));
			}
		}
		public void SmokeTest() {
			LalrProcessor processor = new LalrProcessor(new Tokenizer(new StringReader("((100+5.0)/\r\n(4.5+.5))-\r\n12345.4e+1"), grammar), true);
			Assert.Equal(ParseMessage.Accept, processor.ParseAll());
			XPathDocument doc;
			using (TokenXmlReader reader = new TokenXmlReader(null, processor.CurrentToken)) {
				doc = new XPathDocument(reader);
			}
			Trace.Write("XML: " + doc.CreateNavigator().OuterXml);
		}
Exemple #4
0
        public void bsnGold()
        {
            using var reader = new StringReader(JsonString);
            var tokenizer    = new Tokenizer(reader, _jsonGrammar);
            var processor    = new LalrProcessor(tokenizer, true);
            var parseMessage = processor.ParseAll();

            if (parseMessage != ParseMessage.Accept)
            {
                throw new Exception("Parsing failed");
            }
        }
Exemple #5
0
 void Parse(JsonTestSuite suite)
 {
     using (var reader = new StringReader(suite.Json)) {
         var          tokenizer    = new Tokenizer(reader, grammar);
         var          processor    = new LalrProcessor(tokenizer, true);
         ParseMessage parseMessage = processor.ParseAll();
         if (parseMessage != ParseMessage.Accept)
         {
             // you could build a detailed error message here:
             // the position is in processor.CurrentToken.Position
             // and use processor.GetExpectedTokens() on syntax errors
             throw new InvalidOperationException("Parsing failed");
         }
     }
 }
Exemple #6
0
 void Parse(XmlTestSuite suite)
 {
     using (var reader = new StringReader(suite.Xml))
     {
         var          tokenizer    = new Tokenizer(reader, grammar);
         var          processor    = new LalrProcessor(tokenizer, true);
         ParseMessage parseMessage = processor.ParseAll();
         if (parseMessage != ParseMessage.Accept)
         {
             // you could build a detailed error message here:
             // the position is in processor.CurrentToken.Position
             // and use processor.GetExpectedTokens() on syntax errors
             var ct = processor.CurrentToken;
             throw new InvalidOperationException(string.Format("Parsing failed, position: {0}, text: {1}", ct.Position, ct.Text));
         }
     }
 }
        public override object Execute(JsonSuite suite)
        {
            using (var reader = new StringReader(suite.Json))
            {
                var          tokenizer    = new Tokenizer(reader, grammar);
                var          processor    = new LalrProcessor(tokenizer, true);
                ParseMessage parseMessage = processor.ParseAll();
                if (parseMessage != ParseMessage.Accept)
                {
                    // you could build a detailed error message here:
                    // the position is in processor.CurrentToken.Position
                    // and use processor.GetExpectedTokens() on syntax errors
                    throw new InvalidOperationException("Parsing failed");
                }

                return(null);                // how do we actually get the results?? wierd.
            }
        }
Exemple #8
0
 internal static bool TryParse(string ruleString, out Reduction ruleToken)
 {
     using (StringReader reader = new StringReader(ruleString)) {
         Tokenizer     tokenizer = new Tokenizer(reader, ruleGrammar);
         LalrProcessor processor = new LalrProcessor(tokenizer);
         ParseMessage  message;
         do
         {
             message = processor.Parse();
             if (message == ParseMessage.Accept)
             {
                 ruleToken = (Reduction)processor.CurrentToken;
                 return(true);
             }
         } while (CompiledGrammar.CanContinueParsing(message));
     }
     ruleToken = null;
     return(false);
 }
Exemple #9
0
        static string getExpectedTokensMessage(LalrProcessor parser)
        {
            var expectedSymbols = parser.GetExpectedTokens (); //actually gets a list of symbols, not tokens
            if (expectedSymbols.Count == 0)
                return string.Empty;

            string result = "Expected one of the following: ";
            foreach (Symbol symbol in expectedSymbols)
            {
                result = result + getDisplayTextForSymbol(symbol.Name) + ", ";
            }
            //remove last comma
            result = result.TrimEnd (listSeparators);
            return result;
        }
 public ProcessResult TryProcess(TextReader input, XmlWriter output, XmlResolver resolver)
 {
     if (input == null) {
         throw new ArgumentNullException("input");
     }
     if (output == null) {
         throw new ArgumentNullException("output");
     }
     LalrProcessor parser = new LalrProcessor(new Tokenizer(input, grammar));
     ParseMessage message = parser.Parse();
     while (CompiledGrammar.CanContinueParsing(message)) {
         message = parser.Parse();
     }
     LineInfo position = default(LineInfo);
     if (parser.CurrentToken != null) {
         position = parser.CurrentToken.Position;
     }
     switch (message) {
     case ParseMessage.Accept:
         break;
     case ParseMessage.LexicalError:
         return new ProcessResult(position, string.Format("Lexical error: {0}", parser.CurrentToken));
     case ParseMessage.SyntaxError:
         StringBuilder result = new StringBuilder("Syntax error:");
         foreach (Symbol expectedSymbol in parser.GetExpectedTokens()) {
             result.Append(' ');
             result.Append(expectedSymbol.Name);
         }
         result.Append(" expected");
         return new ProcessResult(position, result.ToString());
     case ParseMessage.CommentError:
         return new ProcessResult(position, "End of block comment not found");
     default: // includes InternalError
         return new ProcessResult(position, "Internal error");
     }
     StringBuilder xsltError = new StringBuilder();
     XsltArgumentList arguments = new XsltArgumentList();
     arguments.XsltMessageEncountered += ((sender, args) => xsltError.Append(args.Message));
     using (XmlReader reader = new TokenXmlReader(nametable, parser.CurrentToken)) {
         transform.Transform(reader, arguments, output, resolver);
     }
     if (xsltError.Length > 0) {
         return new ProcessResult(default(LineInfo), xsltError.ToString());
     }
     return new ProcessResult();
 }
		public void ParseTreeWithTrim() {
			using (TestStringReader reader = CgtTokenizerTest.GetReader()) {
				Tokenizer tokenizer = new Tokenizer(reader, grammar);
				LalrProcessor processor = new LalrProcessor(tokenizer, true);
				Assert.Equal(true, processor.Trim);
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.BlockRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.BlockRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.TokenRead, processor.Parse());
				Assert.Equal(typeof(TextToken), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(Reduction), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(Reduction), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Reduction, processor.Parse());
				Assert.Equal(typeof(Reduction), processor.CurrentToken.GetType());
				Assert.Equal(ParseMessage.Accept, processor.Parse());
				Assert.Equal("Expression", processor.CurrentToken.Symbol.Name);
				Assert.Equal(27, CountTokens(processor.CurrentToken));
			}
		}
 internal static bool TryParse(string ruleString, out Reduction ruleToken)
 {
     using (StringReader reader = new StringReader(ruleString)) {
         Tokenizer tokenizer = new Tokenizer(reader, ruleGrammar);
         LalrProcessor processor = new LalrProcessor(tokenizer);
         ParseMessage message;
         do {
             message = processor.Parse();
             if (message == ParseMessage.Accept) {
                 ruleToken = (Reduction)processor.CurrentToken;
                 return true;
             }
         } while (CompiledGrammar.CanContinueParsing(message));
     }
     ruleToken = null;
     return false;
 }