2014-11-13 3 views
1

В настоящее время я использую парсер JavaScript/ECMAScript 5.1 с JavaCC и имею проблемы с продукцией ArrayLiteral.Как упростить изготовление литерала массива JavaScript/ECMAScript?

ArrayLiteral : 
    [ Elision_opt ] 
    [ ElementList ] 
    [ ElementList , Elision_opt ] 

ElementList : 
    Elision_opt AssignmentExpression 
    ElementList , Elision_opt AssignmentExpression 

Elision : 
    , 
    Elision , 

У меня есть три вопроса, я спрошу их один за другим.


Я попытался упростить/переписать ArrayLiteral производства изображенной выше и, наконец, прибыл на следующую продукцию (псевдо-грамматики):

ArrayLiteral: 
    "[" ("," | AssignmentExpression ",") * AssignmentExpression ? "]" 

Мой первый вопрос: является ли это переписывание правильным?

Два других quetsions:

ответ

1

Да, правильно отражает грамматику представленную.

Тем не менее, лучше переписывают бы:

"[" AssignmentExpression ? ("," AssignmentExpression ?) * "]" 

потому что переписывание в ОП не LL (1) - вы не можете различить возможности, не читая весь AssignmentExpression - в то время как с этим вы может определить, какую альтернативу можно использовать, просто взглянув на первый токен.

+0

Это хорошо, я думаю, что поеду за ним. Хотя вопрос с отрицательным 'LOOKAHEAD' по-прежнему интересен (мне нужно это в нескольких других местах). – lexicore

 Смежные вопросы

  • Нет связанных вопросов^_^