33 lines
636 B
C#
33 lines
636 B
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections;
|
|
|
|
namespace sharp.parser
|
|
{
|
|
public abstract class Parser<T>
|
|
{
|
|
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);
|
|
|
|
}
|
|
}
|