Я продолжаю работать над своим JavaCC grammar для ECMAScript 5.1. На самом деле все идет хорошо, я думаю, что теперь я рассмотрел большинство выражений.Как реализовать правило JavaScript/ECMAScript «Нет LineTerminator здесь» в JavaCC?
У меня есть два вопроса, оба из которых связаны с автоматической точкой с запятой (§7.9.1). Это одна из них.
Спецификация определяет следующую продукцию:
PostfixExpression :
LeftHandSideExpression
LeftHandSideExpression [no LineTerminator here] ++
LeftHandSideExpression [no LineTerminator here] --
Как я могу реализовать надежные «не КонцаСтроки» проверить?
Для записи моего LINE_TERMINATOR
на данный момент что-то вроде:
SPECIAL_TOKEN :
{
<LINE_TERMINATOR: <LF> | <CR> | <LS> | <PS> >
| < #LF: "\n" > /* Line Feed */
| < #CR: "\r" > /* Carriage Return */
| < #LS: "\u2028" > /* Line separator */
| < #PS: "\u2029" > /* Paragraph separator */
}
Я прочитал о lexical states, но я не уверен, что это правильное направление. Я проверил несколько других грамматик JavaScript, которые я нашел, но не нашел там подобных правил. (Я действительно чувствую себя total cargo culter, когда я пытаюсь что-то обгонять из этих грамматик.)
Я был бы благодарен за указатель, подсказку или просто ключевое слово для правильного направления поиска.
Хм, очень интересная идея. Я попробую. – lexicore
Или, может быть, 'getToken (0) .endLine == getToken (1) .beginLine'. –