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);
|
|||
|
|
|||
|
}
|
|||
|
}
|