-
Notifications
You must be signed in to change notification settings - Fork 0
/
GenericParsingTable.cs
67 lines (55 loc) · 1.94 KB
/
GenericParsingTable.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System.Collections.Generic;
using System.Linq;
using CNFDotnet.Analysis.Grammar;
using CNFDotnet.Analysis.Parsing;
namespace CNFDotnet.Tests
{
public abstract class BaseGenericParsingTable<TAction>
where TAction : class, IAction
{
public IEnumerable<GenericParsingTableItem> Items => this._items;
private readonly GenericParsingTableItem[] _items;
public BaseGenericParsingTable(params GenericParsingTableItem[] items)
{
this._items = items;
}
public BaseGenericParsingTable(string json)
{
this._items = this.ParseJSON(json);
}
public abstract void Verify
(CNFGrammar cnfGrammar, IParsingTable<TAction> generatedTable);
protected abstract GenericParsingTableItem[]
ParseJSON(string json);
public override string ToString()
=> string.Join
(
'\n',
this._items.Select
(
x => $"(\"{x.Row}\", \"{x.Column}\", \"{x.Action}\"),"
)
);
}
public class GenericParsingTableItem
{
public string Row { get; private set; }
public string Column { get; private set; }
public string Action { get; private set; }
private GenericParsingTableItem(string row, string column, string action)
{
this.Row = row;
this.Column = column;
this.Action = action;
}
public GenericParsingTableItem
((string Row, string Column, string Action) element)
: this(element.Row, element.Column, element.Action)
{ }
public static implicit operator GenericParsingTableItem
((string Row, string Column, string Action) element)
=> new GenericParsingTableItem(element);
public override string ToString()
=> $"{this.Row}:{this.Column} -> {this.Action}";
}
}