Почему альтернативный символ грамматики ECMAScript RegExp остается рекурсивным?

Я не могу понять, почему Alternative остается рекурсивным. Это действительно бросает ключ в мой парсер.

Alternative :: 
    [empty] 
    Alternative Term 

Вот примечание в части семантики спецификации, которая не совсем ясна. Может быть, рассуждение будет раскрыто, как только я это пойму?

ПРИМЕЧАНИЕ Последовательные термины пытаются одновременно сопоставить последовательные части входной строки. Если левая Альтернатива, правый Термин и продолжение регулярного выражения имеют точки выбора, все варианты в продолжении проверяются перед переходом к следующему варианту в правом Term, и все варианты в правом Term проверяются до переходим к следующему выбору в левой Альтернативе.

Какой синтаксический анализатор может правильно обрабатывать леворекурсивную грамматику?


person ChaosPandion    schedule 25.06.2010    source источник


Ответы (1)


Потому что для определенных типов парсеров левая рекурсия намного лучше (например, для yacc — см. раздел 6.2 здесь для объяснения).

Если это вызывает проблемы для вашего конкретного парсера, то обязательно замените его - это никак не повлияет на определение языка.

person psmears    schedule 25.06.2010
comment
Я считаю, что мой синтаксический анализатор известен как синтаксический анализатор рекурсивного спуска, и мне интересно, какой тип синтаксического анализатора будет использоваться без замены символов. PS: Если вы не заметили, я новичок в этом. - person ChaosPandion; 25.06.2010
comment
Парсер yacc, о котором я упоминал в своем ответе, представляет собой парсер LALR(1) (см. en.wikipedia.org /wiki/LALR_parser). - person psmears; 25.06.2010
comment
Я собираюсь принять этот ответ, так как ранее я менял символы и не сталкивался с проблемами. Я просто не был уверен, может ли это привести к непредвиденным последствиям в моей окончательной реализации. - person ChaosPandion; 25.06.2010