2010-06-25 2 views
0

Я не могу на всю жизнь понять, почему альтернатива оставлена ​​рекурсивной. Это действительно бросает ключ в мой парсер.Почему альтернативный символ грамматики ECMAScript RegExp остался рекурсивным?

 
Alternative :: 
    [empty] 
    Alternative Term 

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

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

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

ответ

2

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

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

+0

Я считаю, что мой парсер известен как рекурсивный парсер спуска, и мне интересно, какой тип парсера будет использоваться без замены символов. * PS: В случае, если вы не заметили, я новичок в этом. * – ChaosPandion

+0

Парсер, о котором я упоминал в своем ответе, yacc, является парсером LALR (1) (см. Http://en.wikipedia.org/wiki/LALR_parser). – psmears

+0

Я собираюсь принять этот ответ, поскольку раньше я переключал символы вокруг и сталкивался с проблемами. Я просто не был уверен, может ли это привести к непредвиденным последствиям в моей окончательной реализации. – ChaosPandion