Я работаю над детерминированным контекстно-свободным алгоритмом синтаксического анализа с O (N) сложностью работы, O (log N) временной сложностью, детализированным параллелизмом, который пропорционален длине входной строки, и эквивалентным поведением для LR parser. Я отправлю его на рецензию в ближайшее время.
Основная идея состоит в том, чтобы обрабатывать каждый символ во входном потоке независимо, предполагая, что он может соответствовать любому правилу, а затем собирать соседние группы символов, пока они однозначно не соответствуют одному правилу. Как только правило сопоставлено, оно отфильтровывается алгоритмом. После того, как все правила сопоставлены, токены собраны в последовательность.
Существует некоторая сложность, связанная с обработкой токенов с подстановочными знаками, которые могут частично вкладываться, и необходим шаг постобработки для их обработки и поддержания сложности O (log N) в худшем случае. Этот шаг, вероятно, не нужен на практике.