Грамматика по определению содержит продукты, пример очень простой грамматики:
E -> E + E
E -> n
Я хочу реализовать класс Grammar в C #, но я не уверен, как хранить продукцию, например, как различать терминальный и нетерминальный символ. я думал о:
struct Production
{
String Left; // for example E
String Right; // for example +
}
Left всегда будет нетерминальным символом (речь идет о контекстно-свободных грамматиках) Но правая часть продукции может содержать терминальные и нетерминальные символы
Итак, теперь я думаю о двух способах реализации:
Нетерминальные символы будут записаны с использованием скобок, например:
E + E будет представлен в виде строки «[E] + [E]»
Создать дополнительную структуру данных NonTerminal
struct NonTerminal { Строковый символ; }
и E + E будут представлены как массив / список:
[new NonTerminal("E"), "+", new NonTerminal("E")]
но думаю, что есть лучшие идеи, было бы полезно услышать какой-нибудь ответ