37 lines
1.0 KiB
C#
37 lines
1.0 KiB
C#
namespace Parsing;
|
|
|
|
using Parsing.Schema;
|
|
using Parsing.Tokenization;
|
|
|
|
public class LineParser
|
|
{
|
|
private string[] delimiters;
|
|
private bool removeEmptyEntries = false;
|
|
private InputSchema schema;
|
|
private InputSchemaContext context;
|
|
|
|
public LineParser(InputSchema schema, string[]? delimiters = null, bool removeEmptyEntries = true)
|
|
{
|
|
this.delimiters = delimiters ?? new string[] { " " };
|
|
this.removeEmptyEntries = removeEmptyEntries;
|
|
this.schema = schema;
|
|
}
|
|
|
|
private string[] ParseLineIntoWords(string line)
|
|
{
|
|
var options = StringSplitOptions.TrimEntries;
|
|
if (this.removeEmptyEntries)
|
|
{
|
|
options = options | StringSplitOptions.RemoveEmptyEntries;
|
|
}
|
|
return line.Split(this.delimiters, options);
|
|
}
|
|
|
|
public IList<IToken> ParseLine(string line)
|
|
{
|
|
this.context = this.schema.CreateContext();
|
|
var words = this.ParseLineIntoWords(line);
|
|
return this.schema.ProcessWordList(words);
|
|
}
|
|
}
|