public void MultiLineTokens()
        {
            ScannerSpecification oSpec = new ScannerSpecification();

            oSpec.AddLiteral("l", CharType.Letters, '_');
            oSpec.AddLiteral("d", CharType.Numbers);
            oSpec.AddLiteral("br1", '[');
            oSpec.AddLiteral("br2", ']');

            oSpec.AddTokenDeclaration("id", "l{l|d}");
            oSpec.AddBoundedToken("id2", "br1", "br2", null);


            StateParser oStateParser = new StateParser(new StateScanner(oSpec, 4));

            oStateParser.Spec.AddRule("id", "id|id2");

            {
                oStateParser.SetSource(
                    @"select [
 x int] from x
");
                this.ReadAndAssertToken(oStateParser, "id", "select");
                this.ReadAndAssertToken(oStateParser, "id2", "[");
                this.ReadAndAssertToken(oStateParser, "id2", " x int]");
            }
        }
        public void VariablesAssignment()
        {
            ScannerSpecification oSpec = new ScannerSpecification();

            oSpec.AddLiteral("l", CharType.Letters, '_');
            oSpec.AddLiteral("d", CharType.Numbers);
            oSpec.AddLiteral("x", '=', ';');

            oSpec.AddTokenDeclaration("id", "l{l|d}");
            oSpec.AddTokenDeclaration("number", "d{d}");
            oSpec.AddTokenDeclaration("sep", "x");

            StateParser oStateParser = new StateParser(new StateScanner(oSpec, 4));

            oStateParser.Spec.AddRule("Tag", "id sep number sep");

            {
                oStateParser.SetSource("sText=10;");
                this.ReadAndAssertToken(oStateParser, "id", "sText");
                this.ReadAndAssertToken(oStateParser, "sep", "=");
                this.ReadAndAssertToken(oStateParser, "number", "10");
                this.ReadAndAssertToken(oStateParser, "sep", ";");
                var oToken = oStateParser.GetNextToken();
                Assert.IsNull(oToken);
            }
        }