57 lines
1.5 KiB
C#
57 lines
1.5 KiB
C#
using ln.collections;
|
|
using ln.parse.tokenizer;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace ln.application.configuration
|
|
{
|
|
public class ConfigurationParser
|
|
{
|
|
ConfigurationContainer RootContainer { get; }
|
|
|
|
public ConfigurationParser()
|
|
{
|
|
RootContainer = new ConfigurationContainer();
|
|
}
|
|
public ConfigurationParser(ConfigurationContainer rootContainer)
|
|
{
|
|
RootContainer = rootContainer;
|
|
}
|
|
|
|
public void Parse(String source)
|
|
{
|
|
Parse(configurationTokenizer.Parse(source));
|
|
}
|
|
public void Parse(Token[] tokens)
|
|
{
|
|
ArrayStream<Token> tokenStream = new ArrayStream<Token>(tokens.Where((e) => !(e is Token.WhiteSpaceToken)));
|
|
ParseContainer(tokenStream,RootContainer);
|
|
}
|
|
|
|
private void ParseContainer(ArrayStream<Token> tokenStream,ConfigurationContainer container)
|
|
{
|
|
while (tokenStream.Current is Token.BracketToken bracket && bracket.Value.Equals("}"))
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static Tokenizer configurationTokenizer;
|
|
|
|
static ConfigurationParser() {
|
|
configurationTokenizer = new Tokenizer()
|
|
.Add(TokenMatcher.WHITESPACE)
|
|
.Add(TokenMatcher.FLOAT)
|
|
.Add(TokenMatcher.INTEGER)
|
|
.Add(TokenMatcher.STRING)
|
|
.Add(TokenMatcher.OPERATOR)
|
|
.Add(TokenMatcher.BRACKET);
|
|
|
|
}
|
|
}
|
|
}
|