Source transfer commit

master
Harald Wolff Thobaben 2020-11-24 18:23:05 +01:00
parent b68568be3a
commit efa1a64685
7 changed files with 191 additions and 35 deletions

View File

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ln.application.configuration
{
public class ConfigurationContainer
{
public ConfigurationContainer Parent { get; private set; }
public String Key { get; set; }
List<ConfigurationContainer> children = new List<ConfigurationContainer>();
Dictionary<string, string[]> statements = new Dictionary<string, string[]>();
public ConfigurationContainer()
{
}
public ConfigurationContainer(ConfigurationContainer parent)
{
parent.Add(this);
}
public void Add(ConfigurationContainer child)
{
if (child.Parent != null)
child.Parent.Remove(child);
children.Add(child);
child.Parent = this;
}
public void Remove(ConfigurationContainer child)
{
if (child.Parent == this)
{
children.Remove(child);
child.Parent = null;
}
}
}
}

View File

@ -0,0 +1,56 @@
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);
}
}
}

View File

@ -10,6 +10,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ln.parse\ln.parse.csproj" />
<ProjectReference Include="..\ln.type\ln.type.csproj" />
</ItemGroup>

View File

@ -0,0 +1,8 @@

aNumber: 123.987;
anInteger: 45467;
aString: "This is a test string";
objectA {
something: "stupid";
}

View File

@ -0,0 +1,34 @@
using NUnit.Framework;
using System.IO;
namespace ln.application.tests
{
public class Tests
{
[SetUp]
public void Setup()
{
using (StreamReader sr = new StreamReader("ConfigurationTest.conf"))
{
testConfiguration = sr.ReadToEnd();
}
}
string testConfiguration;
[Test]
public void TestTokenizer()
{
Assert.Pass();
}
}
}

View File

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0"/>
</ItemGroup>
</Project>