public void Test(SourceReader sr) { Console.WriteLine("=============== CPS Parser Combinators =================="); SetUpScanner(); var production = SetUpParser(); ForkableScannerBuilder fsb = new ForkableScannerBuilder(m_scannerInfo); fsb.SetTriviaTokens(SPACE.Index); var scanner = fsb.Create(sr); var runner = new ParserRunner <int>(production); try { var result = runner.Execute(scanner); Console.WriteLine("Result: {0}", result); } catch (Exception ex) { Console.WriteLine("Parse Errors:"); Console.WriteLine(ex.Message); } Console.WriteLine(); Console.WriteLine(); }
// private void button_Execute_Click(object sender, EventArgs e) { // ParserRunner pr = new ParserRunner(); try { List <Parser.Error> errors = new List <Parser.Error>(); CompilationUnitNode cn = ParserRunner.ParseFile(this.comboBox_csfile.Text, out errors); // this.textBox1.Text = ""; if (errors.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (var v in errors) { sb.AppendLine(string.Format("({0},{1} token:{2}) {3}", v.Line, v.Column, v.Token, v.Message)); } this.textBox1.Text = sb.ToString(); } else { StringBuilder sb = new StringBuilder(); cn.ToSource(sb); this.textBox1.Text = sb.ToString(); } } catch (Exception ee) { MessageBox.Show(ee.ToString()); } }
public void ParserFuncTest() { Lexicon test = new Lexicon(); var ID = test.DefaultLexer.DefineToken(RE.Range('a', 'z').Concat( (RE.Range('a', 'z') | RE.Range('0', '9')).Many())); var NUM = test.DefaultLexer.DefineToken(RE.Range('0', '9').Many1()); var GREATER = test.DefaultLexer.DefineToken(RE.Symbol('>')); var WHITESPACE = test.DefaultLexer.DefineToken(RE.Symbol(' ').Union(RE.Symbol('\t'))); var p1 = from i in ID from g in GREATER from g2 in GREATER.AsParser(l => l.PrefixTrivia.Count == 0) from n in NUM select "A"; var p2 = from i in ID from g in GREATER from g2 in GREATER from n in NUM select "B"; var parser1 = p1 | p2; var info = test.CreateScannerInfo(); ForkableScannerBuilder builder = new ForkableScannerBuilder(info); builder.SetTriviaTokens(WHITESPACE.Index); var errorManager = new CompilationErrorManager(); var context = new ParserContext(errorManager, 1, 2); context.DefineDefaultCompilationErrorInfo(0); ParserRunner <string> runner = new ParserRunner <string>(parser1, context); string source1 = "abc >> 123"; var sr1 = new SourceReader(new StringReader(source1)); ForkableScanner scanner1 = builder.Create(sr1); var result1 = runner.Run(scanner1); Assert.AreEqual("A", result1); Assert.AreEqual(0, errorManager.Errors.Count); string source2 = "abc > > 123"; var sr2 = new SourceReader(new StringReader(source2)); ForkableScanner scanner2 = builder.Create(sr2); var result2 = runner.Run(scanner2); Assert.AreEqual("B", result2); Assert.AreEqual(0, errorManager.Errors.Count); }
private Compiler(Context context) { context.put(CONTEX_KEY, this); options = CommandLineOptions.instance(context); parser = ParserRunner.instance(context); declarationAnalysis = DeclarationAnalysis.instance(context); codeTypeAnalysis = CodeTypeAnalysis.instance(context); flowAnalysis = FlowAnalysis.instance(context); codeGeneration = CodeGeneration.instance(context); log = Log.instance(context); }
public void ParserFuncTest() { Lexicon test = new Lexicon(); var ID = test.DefaultLexer.DefineToken(RE.Range('a', 'z').Concat( (RE.Range('a', 'z') | RE.Range('0', '9')).Many())); var NUM = test.DefaultLexer.DefineToken(RE.Range('0', '9').Many1()); var GREATER = test.DefaultLexer.DefineToken(RE.Symbol('>')); var WHITESPACE = test.DefaultLexer.DefineToken(RE.Symbol(' ').Union(RE.Symbol('\t'))); var p1 = from i in ID from g in GREATER from g2 in GREATER.AsParser(true) from n in NUM select "A"; var p2 = from i in ID from g in GREATER from g2 in GREATER from n in NUM select "B"; var parser1 = p1 | p2; var info = test.CreateScannerInfo(); ForkableScannerBuilder builder = new ForkableScannerBuilder(info); builder.SetSkipTokens(WHITESPACE.Index); var errorManager = new CompilationErrorManager(); var context = new ParserContext(errorManager, 1, 2); context.DefineDefaultCompilationErrorInfo(0); ParserRunner<string> runner = new ParserRunner<string>(parser1, context); string source1 = "abc >> 123"; var sr1 = new SourceReader(new StringReader(source1)); ForkableScanner scanner1 = builder.Create(sr1); var result1 = runner.Run(scanner1); Assert.AreEqual("A", result1); Assert.AreEqual(0, errorManager.Errors.Count); string source2 = "abc > > 123"; var sr2 = new SourceReader(new StringReader(source2)); ForkableScanner scanner2 = builder.Create(sr2); var result2 = runner.Run(scanner2); Assert.AreEqual("B", result2); Assert.AreEqual(0, errorManager.Errors.Count); }
public void ParserCastTest() { Lexicon test = new Lexicon(); var ID = test.Lexer.DefineToken(RE.Range('a', 'z').Concat( (RE.Range('a', 'z') | RE.Range('0', '9')).Many())); var NUM = test.Lexer.DefineToken(RE.Range('0', '9').Many1()); var GREATER = test.Lexer.DefineToken(RE.Symbol('>')); var WHITESPACE = test.Lexer.DefineToken(RE.Symbol(' ').Union(RE.Symbol('\t'))); var p1 = from i in ID from g in GREATER from g2 in GREATER from n in NUM select "hello"; var parser1 = p1.TryCast <object>(); var info = test.CreateScannerInfo(); ForkableScannerBuilder builder = new ForkableScannerBuilder(info); builder.SetTriviaTokens(WHITESPACE.Index); var errorManager = new CompilationErrorManager(); var context = new ParserContext(errorManager, 1, 2); context.DefineDefaultCompilationErrorInfo(0); var el = errorManager.CreateErrorList(); context.ErrorList = el; ParserRunner <object> runner = new ParserRunner <object>(parser1, context); string source1 = "abc >> 123"; var sr1 = new SourceReader(new StringReader(source1)); ForkableScanner scanner1 = builder.Create(sr1); var result1 = runner.Run(scanner1); Assert.AreEqual("hello", result1); Assert.AreEqual(0, el.Count); }
public void ParserCastTest() { Lexicon test = new Lexicon(); var ID = test.Lexer.DefineToken(RE.Range('a', 'z').Concat( (RE.Range('a', 'z') | RE.Range('0', '9')).Many())); var NUM = test.Lexer.DefineToken(RE.Range('0', '9').Many1()); var GREATER = test.Lexer.DefineToken(RE.Symbol('>')); var WHITESPACE = test.Lexer.DefineToken(RE.Symbol(' ').Union(RE.Symbol('\t'))); var p1 = from i in ID from g in GREATER from g2 in GREATER from n in NUM select "hello"; var parser1 = p1.TryCast<object>(); var info = test.CreateScannerInfo(); ForkableScannerBuilder builder = new ForkableScannerBuilder(info); builder.SetTriviaTokens(WHITESPACE.Index); var errorManager = new CompilationErrorManager(); var context = new ParserContext(errorManager, 1, 2); context.DefineDefaultCompilationErrorInfo(0); var el = errorManager.CreateErrorList(); context.ErrorList = el; ParserRunner<object> runner = new ParserRunner<object>(parser1, context); string source1 = "abc >> 123"; var sr1 = new SourceReader(new StringReader(source1)); ForkableScanner scanner1 = builder.Create(sr1); var result1 = runner.Run(scanner1); Assert.AreEqual("hello", result1); Assert.AreEqual(0, el.Count); }
public void Test(SourceReader sr) { Console.WriteLine("=============== Error Recovery Parser Combinators ======="); SetUpScanner(); var production = SetUpParser(); ForkableScannerBuilder fsb = new ForkableScannerBuilder(m_scannerInfo); fsb.SetTriviaTokens(SPACE.Index); var scanner = fsb.Create(sr); var runner = new ParserRunner <int>(production); List <SyntaxError> errors = new List <SyntaxError>(); var result = runner.Execute(scanner, errors); if (errors.Count == 0) { Console.WriteLine("Result: {0}", result); } else { Console.WriteLine("Parse Errors:"); foreach (var err in errors) { Console.WriteLine("{0}:{1} {2}", err.Code, err.Description, err.Location.StartLocation); } } Console.WriteLine(); Console.WriteLine(); }
public void Test(SourceReader sr) { Console.WriteLine("=============== CPS Parser Combinators =================="); SetUpScanner(); var production = SetUpParser(); ForkableScannerBuilder fsb = new ForkableScannerBuilder(m_scannerInfo); fsb.SetTriviaTokens(SPACE.Index); var scanner = fsb.Create(sr); var runner = new ParserRunner<int>(production); try { var result = runner.Execute(scanner); Console.WriteLine("Result: {0}", result); } catch (Exception ex) { Console.WriteLine("Parse Errors:"); Console.WriteLine(ex.Message); } Console.WriteLine(); Console.WriteLine(); }
public ParserService() { parserRunner = new ParserRunner(); }
public void Test(SourceReader sr) { Console.WriteLine("=============== Error Recovery Parser Combinators ======="); SetUpScanner(); var production = SetUpParser(); ForkableScannerBuilder fsb = new ForkableScannerBuilder(m_scannerInfo); fsb.SetTriviaTokens(SPACE.Index); var scanner = fsb.Create(sr); var runner = new ParserRunner<int>(production); List<SyntaxError> errors = new List<SyntaxError>(); var result = runner.Execute(scanner, errors); if (errors.Count == 0) { Console.WriteLine("Result: {0}", result); } else { Console.WriteLine("Parse Errors:"); foreach (var err in errors) { Console.WriteLine("{0}:{1} {2}", err.Code, err.Description, err.Location.StartLocation); } } Console.WriteLine(); Console.WriteLine(); }