Чтобы получить более четкое понимание здесь, вам нужно взглянуть на раздел 2.2 в RM.
2.2 (1), в котором говорится:
Текст каждогоКомпиляция представляет собой последовательность отдельных лексических элементов. Каждый лексический элемент состоит из последовательности символов и является разделителем, идентификатором, зарезервированным словом, числовым литералом, символьным литералом, строковым литералом или комментарием. Смысл программы зависит только от конкретных последовательностей лексических элементов, которые формируют ее компиляции, исключая комментарии.
И 2,2 (3/2), в которых говорится:
«[В некоторых случаях для разделения смежных лексических элементов требуется явный разделитель.] Разделитель - это любой символ пробела разделителя, пробел формата format_effector или конец строки следующим образом:
Разделитель_пространствасимвол пробела является разделителем, за исключением внутри комментария, string_literal или character_literal.
Символ, позиция кодовой точки которого равна 16 # 09 # (TABULATION CHARACTER) Табличка символов (HT) является разделителем, кроме как внутри комментария.
Конец строки всегда является разделителем.
Допускается один или несколько разделителей между любыми двумя смежными лексическими элементами, перед первой или каждой последней компиляцией. "
и
Разделителем является один из следующих специальных символовrs:
& ' ( ) * + , – . / : ; < = > |
или один из следующих составных разделителей, каждый из которых состоит из двух смежных специальных символов
=> .. ** := /= >= <= << >> <>
Каждый из специальныхСимволы, перечисленные для разделителей из одного символа, являются одним разделителем, за исключением случаев, когда этот символ используется в качестве символа составного разделителя или символа комментария, string_literal, character_literal или numeric_literal.
Итак,как только вы отфильтровываете пустое пространство программного текста и разбиваете его на последовательность лексических элементов, лексический элемент, соответствующий строковому литералу, начинается с символа двойной кавычки, а лексический элемент, соответствующий комментарию, начинается с -.
Это явно разные элементы синтаксиса, и они не конфликтуют друг с другом.
Это также объясняет, почему;
X := A - -1
+ B;
дает результат, отличный от;
X := A --1
+ B;
Разделитель пробелов между черточками делает первый минус другим лексическим элементом, чем -1, поэтому -1 - числовой литерал в первом случае, а - 1 - комментарий.