Какие допустимые идентификаторы в R7RS-small? - PullRequest
2 голосов
/ 08 марта 2020

R7RS-small говорит, что все идентификаторы должны заканчиваться разделителем, но в то же время он определяет довольно сложные правила для того, что может быть в идентификаторе. Итак, какой это?

Идентификатор, который должен начинаться с начального символа, а затем продолжаться до разделителя или начинается с начального символа и продолжается в соответствии с синтаксисом, определенным в 7.1.1.

пара очевидных случаев. Это действительные идентификаторы?

  • a#a
  • b,b
  • c'c
  • d[d]

Если они не должны быть действительными, какова цель сказать, что идентификатор должен заканчиваться разделителем?

1 Ответ

1 голос
/ 08 марта 2020

|..ident..| - это разделители для символов в R7RS, чтобы разрешить любой символ, который нельзя вставить в символ старого стиля (| - это разделитель).

Однако в R6RS "official" грамматика была неправильной, поскольку она не позволяла определять символы так, чтобы 1+, что привело к тому, что все реализации определяли свои собственные правила для преодоления этой болезни официальной грамматики.

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

В разделе 7.1.1 вы найдете форму backus-naur, которая определяет лексическую структуру идентификаторов R7RS, но я сомневаюсь, что реализации следуют ей.

Я цитирую здесь

Как и в случае с идентификаторами, различные реализации Схемы используют немного разные правила, но всегда имеет место, что последовательность символов, которые не содержат специальных символов и начинаются с символа, который не может начинаться с числа, считается символом

Другими словами, реализация будет использовать такую ​​функцию, как read-atom и после этого он будет классифицировать атом путем обратного просмотра с номером чтения, а если номер? не может быть символом.

...