using System; using System.Collections.Generic; using System.Collections; namespace sharp.parser { public abstract class Parser { protected Lexer Lexer { get; private set; } protected Parser(TokenDefinition[] tokenDefinitions) { this.Lexer = new Lexer(tokenDefinitions); } public Token[] Tokenize(char[] source){ return this.Lexer.parse(new CharBuffer(source)); } public T Parse(string source){ return Parse(source.ToCharArray()); } public T Parse(char[] source){ Token[] tokens = Tokenize(source); return ParseTokens(tokens); } protected abstract T ParseTokens(Token[] tokens); } }