Ejemplo n.º 1
0
        public void TestBootstrap()
        {
            const string code = @"
Expr     ::= Or+
Or       ::= AtomExpr ('|' AtomExpr)* 

AtomExpr ::= Atom Trailer 
Atom     ::= Name | Str | '[' Expr ']' | '(' Expr ')' 

Def      ::= '::='
Equals   ::= Name Def Expr

Trailer  ::= ['*' | '+' | '{' Number{1 2} '}']

Name     ::= R'[a-zA-Z_][a-zA-Z0-9]*'
Str      ::= R'[\w|\W]*'
Number   ::= R'\d+'
";
            // Initialize parser
            var parser = BootstrapParser.GenParser();
            var re     = DefualtToken.Token();

            // Gen tokenized words
            var tokens = re.Matches(code).Select(i => i.ToString()).ToArray();

            // Parsing
            var meta = new MetaInfo();

            Console.WriteLine(parser.Stmt.Match(
                                  tokens,
                                  ref meta,
                                  false
                                  ).Dump());
        }
Ejemplo n.º 2
0
        public static string SelfExamination(string source)
        {
            // Initialize parser
            var parser = LanguageTest.Bootstrap.Parser.GenParser();
            var re     = DefualtToken.Token();

            // Gen tokenized words
            var tokens = re.Matches(source).Select(i => i.ToString()).ToArray();

            // Parsing
            var meta = new MetaInfo();

            return(parser.Stmt.Match(
                       objs: tokens,
                       partial: false,
                       meta: ref meta
                       ).Dump());
        }