SPAN представляется набором типов записей, каждая запись имеет много деталей.
Определение классической грамматики, охватывающей все записи (как нетерминалы), с точки зрениялюбые подзаписи (как нетерминальные) и терминальные типы данных, представляющие различные типы данных, определенные SPAN.Может быть много нетерминалов, но это просто большая грамматика, но не сложная.
Большинство языков программирования имеют небольшой набор терминальных токенов, которые обычно могут появляться где угодно.Правда в том, что грамматики определяют ожидания того, что может появиться далее (называемые «первым» и «последующим» наборами в литературе по анализатору LR), включая очень ограниченный набор терминалов.SPAN грамматика не будет отличаться;каждое «состояние разбора» синтаксического анализатора подразумевает ограниченный набор терминалов, которые следуют дальше, и один использует синтаксический анализатор, чтобы воспользоваться этим.(Я построил парсеры L (AL) R, и можно легко использовать «текущее» состояние, чтобы определить подмножество терминалов, которые могут произойти дальше).Таким образом, синтаксический анализатор SPAN может определить только небольшой набор токенов, который может появиться в следующем состоянии в каждом состоянии, и использовать его для выбора персонажей, содержащих эти следующие токены (они должны образовывать непересекающиеся наборы!).
Легкоспособ реализовать это с помощью синтаксического анализатора рекурсивного спуска.
Поэтому я утверждаю, что все эти механизмы синтаксического анализа вполне подойдут для синтаксического анализа SPAN, с некоторой частью пользовательской работы, возможно, для полученияtokens.
Действия синтаксического анализа для обычных синтаксических анализаторов создают деревья, но заполнять поля структуры данных так же просто.