Концепция, которая помогает ответить на этот вопрос - ключевое слово . Ключевым словом является зарезервированное слово . Также проверьте свою книгу Дракона.
Зарезервированное слово - это слово, которое программист не может использовать в качестве идентификатора, в данном случае это слово, например , если , или оператор, такой как -> . Другими словами, если вы попытаетесь использовать «let ( if ) =» или «let ( -> ) =», вы получите ошибку, потому что вы используете зарезервированное слово.
Для этого вопроса следует интерпретировать Раздел 3.6 как, это ключевые слова, зарезервированные для использования F #. Раздел 3.7 as, вы можете создавать свои собственные операторы, если они следуют этим правилам и не совпадают с одним из зарезервированных ключевых слов в разделе 3.6.
То есть, если вы хотите создать оператор -> , вы можете, но вы не можете создать оператор ->
Чтобы ответить на ваш вопрос "Так ... кто они?" Они являются ключевыми словами и являются операторами, определенными системой, их нельзя использовать как определяемые пользователем операторы.
EDIT
Давайте посмотрим на это с другой стороны. Все правила лексера вызываются правилами парсера. Легко найти использование правила symbolic-op, то есть op-name, но ищите символическое ключевое слово, и вы обнаружите, что «например, 34 .. постфильтрованы по двум токенам: одному int и одному symbolic-ключевому слову, - ..‖ «. Полезно, но оно не отвечает на ваш вопрос, и теперь вы задаетесь вопросом, почему существует правило лексера, которое не вызывается правилом синтаксического анализатора. Я не знаю, это спецификация, а не формальное определение грамматики. Если вы посмотрите на F # источник , вы можете обнаружить, что спецификация и грамматика не совпадают, как вы хотели бы. Другими словами, спецификация предназначена для того, чтобы помочь вам понять язык, я бы не стал использовать его в качестве окончательного набора правил для построения компилятора.
Если указать спецификацию в терминах или автомобилях, спецификации скажут вам, что вы можете ожидать от машины, как должен функционировать автомобиль, или ограничения для параметра, в нем не сказано, как построить машину.
Если бы я писал компилятор, я бы интерпретировал случай 34 .. чтобы не создавать токены для символических ключевых слов при первом проходе, а использовать постобработку, чтобы отфильтровать их в соответствующие токены. Другими словами, переписать поток токенов за второй проход. Если бы это был я, я бы проверил, что спецификация является полной грамматикой, прежде чем использовать ее для построения компилятора. Однако, если вы хотите нажать на, то я бы, вероятно, пропустил поиск символических ключевых слов на первом проходе и использовал бы перезапись потока после того, как поток токенов был создан на первом проходе.
Если вы хотите больше узнать о фильтрации токенов в F #, см. Раздел 15 спецификации «Лексическая фильтрация»; он дает поясняющее объяснение того, как легкий синтаксис преобразуется в обычный синтаксис путем перезаписи потока токенов.