Алгоритм Эрли (и его варианты, такие как GLR) могут быть реализованы для создания синтаксического анализатора, который работает за кубическое время.Поскольку возможное число возможных синтаксических разборов может быть экспоненциальным, эта сложность заключается только в создании «леса разбора», который представляет собой группу обеспечения доступности баз данных, содержащую все возможные разборы.На самом деле перечисление синтаксических анализаторов займет время, пропорциональное количеству возможностей.
Обратите внимание, что когда мы говорим здесь о сложности времени, мы говорим о длине входной строки, а не о размере грамматики.,Размер, если грамматика оказывает влияние, конечно, обычно линейный, но это зависит от того, как вы измеряете размер, но предполагается, что синтаксический анализатор был построен для определенной грамматики (что может потребовать предварительной обработки в зависимости от грамматикиsize.)
В статье Википедии, указанной выше, есть список реализаций на разных языках, некоторые из которых предназначены для производства, а другие просто для демонстрации алгоритма.Обратите внимание, что синтаксический анализатор GLR, созданный bison, не является кубическим;в патологических случаях это может быть экспоненциальным.Кроме того, он не создает дерево разбора (или лес);это оставлено на усмотрение пользователя, и наивные алгоритмы, которые не разделяют хранилище, могут потребовать экспоненциального пространства и времени.(Тем не менее, он вполне пригоден для реальных грамматик.)