示例#1
0
        void TestStage1Core(string text, LNode expected)
        {
            var   lexer     = ParsingService.Default.Tokenize(text, ConsoleMessageSink.Value);
            var   treeified = new TokensToTree(lexer, true);
            var   tokens    = treeified.Buffered();
            var   parser    = new StageOneParser(tokens, lexer.SourceFile, ConsoleMessageSink.Value);
            LNode result    = parser.Parse();

            AreEqual(expected, result);
        }
示例#2
0
文件: Macros.cs 项目: bel-uwa/Loyc
 private static LNode ParseStmtInRule(LNode stmt, IMessageSink sink)
 {
     if (stmt.Value is TokenTree)
     {
         return(StageOneParser.ParseTokenTree((TokenTree)stmt.Value, sink, stmt));
     }
     else
     {
         return(F.Braces(stmt));
     }
 }
示例#3
0
 public static LNode Parse(IListSource <Token> tokenTree, ISourceFile file, IMessageSink messages)
 {
     if (_parser == null)
     {
         _parser = new StageOneParser(tokenTree, file, messages);
     }
     else
     {
         _parser.Reset(tokenTree, file);
         _parser.ErrorSink = messages;
     }
     return(_parser.Parse());
 }
示例#4
0
文件: Macros.cs 项目: bel-uwa/Loyc
        private static LNode ParseRuleBody(LNode ruleBody, IMessageSink sink)
        {
            TokenTree ruleTokens;

            if ((ruleTokens = ruleBody.Value as TokenTree) == null && !ruleBody.Calls(S.Braces))
            {
                return(null);
            }

            if (ruleTokens != null)
            {
                return(StageOneParser.ParseTokenTree(ruleTokens, sink, ruleBody));
            }
            else
            {
                if (ruleBody.Args.Any(stmt => stmt.Value is TokenTree))
                {
                    ruleBody = ruleBody.With(S.Tuple, ruleBody.Args.SmartSelect(stmt => ParseStmtInRule(stmt, sink)));
                }
            }
            return(ruleBody);
        }
示例#5
0
 public static LNode ParseTokenTree(TokenTree tokens, IMessageSink sink, LNode basis)
 {
     return(StageOneParser.Parse(tokens, tokens.File, sink));
 }
示例#6
0
		void TestStage1Core(string text, LNode expected)
		{
			var lexer = ParsingService.Default.Tokenize(text, ConsoleMessageSink.Value);
			var treeified = new TokensToTree(lexer, true);
			var tokens = treeified.Buffered();
			var parser = new StageOneParser(tokens, lexer.SourceFile, ConsoleMessageSink.Value);
			LNode result = parser.Parse();
			AreEqual(expected, result);
		}