Что означает "+" в синтаксическом представлении W3C для выражения времени TTML?

Я хочу понять действительные форматы timeExpressions в TTML. Этот раздел спецификации описывает синтаксис. Вот выдержка:

<timeExpression>
  : clock-time
  | offset-time

clock-time
  : hours ":" minutes ":" seconds ( fraction | ":" frames ( "." sub-frames )? )?

offset-time
  : time-count fraction? metric

hours
  : <digit> <digit>
  | <digit> <digit> <digit>+

                                    -- ✂ --

Мне номенклатура документа в некоторой степени знакома, например, я понимаю:

  • | означает ИЛИ
  • (...) группы
  • ? означает необязательный

но что делает + имею в виду?


Я бы предположил, что это означает "один или несколько", как в регулярном выражении, но если бы это было так, почему спецификация гласила бы:

hours
  : <digit> <digit>
  | <digit> <digit> <digit>+

А не просто:

hours
  : <digit> <digit>+

2 ответа

Решение

Документ утверждает, что:

Разрешенное содержимое информационного элемента отображается в виде фрагмента грамматики с использованием операторов Клини?, * И +.

И в этой грамматике + означает один или более

Как hours должен быть дополнен нулями для значений < 10, возможно, два определения предназначены для иллюстрации этого.

+ Означает, что может присутствовать один или несколько фрагментов. Я считаю, что причина, по которой мы делаем различие между компонентами, состоящими из двухзначных часов и трех- или болеезначных часов, состоит в том, что в некоторых случаях часы могут быть только двухзначными, тогда как в других они могут быть больше. В любом случае, минимальное количество цифр равно 2. Я согласен, что просто показывает <digit> <digit>+ будет означать то же самое, но не будет иметь тонкого смысла, что иногда максимальное количество цифр равно 2.

Причина, по которой запись "2 или более цифр" не говорит <digit> <digit> | <digit> <digit> <digit>* является то, что эти два будут неразличимы, когда присутствуют 2 цифры. Насколько я могу судить, это приятный момент.

Другие вопросы по тегам