Реализация производственного класса грамматики в C #

Грамматика по определению содержит продукты, пример очень простой грамматики:

E -> E + E
E -> n

Я хочу реализовать класс Grammar в C #, но я не уверен, как хранить продукцию, например, как различать терминальный и нетерминальный символ. я думал о:

struct Production
{
   String Left;       // for example E
   String Right;      // for example +
}

Left всегда будет нетерминальным символом (речь идет о контекстно-свободных грамматиках) Но правая часть продукции может содержать терминальные и нетерминальные символы

Итак, теперь я думаю о двух способах реализации:

  1. Нетерминальные символы будут записаны с использованием скобок, например:

    E + E будет представлен в виде строки «[E] + [E]»

  2. Создать дополнительную структуру данных NonTerminal

    struct NonTerminal { Строковый символ; }

и E + E будут представлены как массив / список:

[new NonTerminal("E"), "+", new NonTerminal("E")]

но думаю, что есть лучшие идеи, было бы полезно услышать какой-нибудь ответ

7
задан Fred Foo 21 October 2010 в 14:54
поделиться