Exemplo n.º 1
0
 protected void EnsureExtractor(TokenExtractor extractor, string paramName)
 {
     if (extractor == null)
     {
         throw new ArgumentNullException(paramName);
     }
 }
Exemplo n.º 2
0
        public SyntaxTree Parse(TokenExtractor extractor)
        {
            if (extractor == null)
            {
                throw new ArgumentNullException(nameof(extractor));
            }

            TokenExtractorCursor cursor = TokenExtractorCursor.Invalid;
            SyntaxTree           tree   = new SyntaxTree();

            // TODO: Mudar para [SyntaxTreeNode]
            Token token = null;

            try
            {
                cursor = extractor.SaveCursor();

                // TODO: Deve retornar [SyntaxTreeNode]
                token = _grammar.RootElement.Eval(extractor);

                if (token != null && extractor.EndOfCode)
                {
                    var node = new SyntaxTreeNode(token);

                    tree.Validate(node);
                }
            }
            catch (Exception ex)
            {
                if (!TokenExtractorCursor.Invalid.Equals(cursor))
                {
                    try { extractor.RollbackCursor(cursor); }
                    catch (Exception) { /* QUIET */ }
                }

                LogException(ex);
            }

            if (token == null || !tree.IsValid)
            {
                if (!TokenExtractorCursor.Invalid.Equals(cursor))
                {
                    try { extractor.RollbackCursor(cursor); }
                    catch (Exception) { /* QUIET */ }
                }
            }

            return(tree);
        }
Exemplo n.º 3
0
 public abstract Token Eval(TokenExtractor extractor);