public void Test() { var lParen = new Symbol("("); var rParen = new Symbol(")"); var num = new Symbol("NUM"); var ident = new Symbol("ID"); var qStr = new Symbol("QSTR"); var grammar = new Grammar { Symbols = { lParen, rParen, num, ident, qStr }, Conditions = { new Condition("main") { Matchers = { new Matcher(@"blank+"), new Matcher(@"digit+ ('.' digit+)? | '.' digit+", num), new Matcher( @"(alpha | [:.!@#$%^&|?*/+*=\\_-]) (alnum | [:.!@#$%^&|?*/+*=\\_-])*", ident), new Matcher("'\"' ('\\\\\"' | ~'\"')* '\"'", qStr), new Matcher(ScanPattern.CreateLiteral("("), lParen), new Matcher(ScanPattern.CreateLiteral(")"), rParen), } } } }; var target = new DfaSimulationLexer( " (1 (\"bar\" +))", ScannerDescriptor.FromScanRules(grammar.Conditions[0].Matchers, ExceptionLogging.Instance)); var collector = new Collector <Msg>(); target.Accept(collector); Assert.AreEqual( new int[] { lParen.Index, num.Index, lParen.Index, qStr.Index, ident.Index, rParen.Index, rParen.Index }, collector.Select(msg => msg.Id).ToArray()); Assert.AreEqual( new object[] { "(", "1", "(", "\"bar\"", "+", ")", ")" }, collector.Select(msg => msg.Value).ToArray()); }
public void Test() { var lParen = new Symbol("("); var rParen = new Symbol(")"); var num = new Symbol("NUM"); var ident = new Symbol("ID"); var qStr = new Symbol("QSTR"); var grammar = new Grammar { Symbols = { lParen, rParen, num, ident, qStr }, Conditions = { new Condition("main") { Matchers = { new Matcher( ScanPattern.CreateRegular( null, @"[ \t]+")) { Joint ={ new CilMatcher(typeof(void)) } }, new Matcher( ScanPattern.CreateRegular( null, @"[0-9]+(?:[.][0-9]+)? | [.][0-9]+"), num) { Joint ={ new CilMatcher(typeof(Num)) } }, new Matcher( ScanPattern.CreateRegular( null, @"[a-zA-Z:.!@#$%^&|?*/+*=\\_-][a-zA-Z:\d.!@#$%^&|?*/+*=\\_-]*"), ident) { Joint ={ new CilMatcher(typeof(string)) } }, new Matcher( ScanPattern.CreateRegular( null, @"[""](?: \\[""] | [^""])* [""]"), qStr) { Joint ={ new CilMatcher(typeof(QStr)) } }, new Matcher( ScanPattern.CreateLiteral("("), lParen), new Matcher( ScanPattern.CreateLiteral(")"), rParen), } } } }; var target = new BootstrapScanner( " (1 (\"bar\" +))", ScannerDescriptor.FromScanRules(grammar.Conditions[0].Matchers, ExceptionLogging.Instance), null, ExceptionLogging.Instance); var collector = new Collector <Msg>(); target.Accept(collector); Assert.AreEqual( new object[] { null, new Num("1"), null, new QStr("bar"), "+", null, null }, collector.Select(msg => msg.Value).ToArray()); }
public void Test() { var num = new Symbol("NUM"); var ident = new Symbol("ID"); var qStr = new Symbol("QSTR"); var begin = new Symbol("begin"); var end = new Symbol("end"); var assign = new Symbol(":="); var grammar = new Grammar { Symbols = { num, ident, qStr, begin, end, assign }, Conditions = { new Condition("main") { Matchers = { new Matcher( @"digit+ ('.' digit+)? | '.' digit+", num), new Matcher( @"[01234567]+ 'Q'", num), new Matcher( @"alpha alnum*", ident), new Matcher( @" quot ~(quot | esc)* (esc . ~(quot | esc)* )* quot ", qStr), new Matcher( ScanPattern.CreateLiteral("begin"), begin), new Matcher( ScanPattern.CreateLiteral("end"), end), new Matcher( ScanPattern.CreateLiteral(":="), assign), new Matcher( @"blank+"), } } } }; var target = new TdfaSimulationLexer( "b:=10Q \"foo\"", ScannerDescriptor.FromScanRules(grammar.Conditions[0].Matchers, ExceptionLogging.Instance)); var collector = new Collector<Msg>(); target.Accept(collector); Assert.AreEqual( new int[] { ident.Index, assign.Index, num.Index, qStr.Index }, collector.Select(msg => msg.Id).ToArray()); Assert.AreEqual( new object[] { "b", ":=", "10Q", "\"foo\"" }, collector.Select(msg => msg.Value).ToArray()); }