Объясняя более абстрактную форму, в cSharp нет токена '<-', но есть два токена '<' и '-'. </p>
Когда лексический анализатор считывает символы, он проверяет, идет ли следующий символ производит любые токены, которые он может распознать (с упреждением). Если нет, он передает парсеру последний токен, который он смог идентифицировать, и переходит к идентификации следующего токена.
Пошагово:
<
-> Token идентифицированы. Дождитесь следующей записи (вперед) <-
-> Неопознанный токен, передайте <
синтаксическому анализатору и оставьте -
-
-> Идентифицированный токен . Дождитесь следующей записи (вперед) -b
-> Неопознанный токен, передайте -
парсеру и сохраните b
b
-> Идентифицированный токен . Дождитесь следующей записи (вперед) b;
-> Неопознанный токен, передайте b
парсеру и оставьте ;
- И так далее ...
В конце парсер переводит это как «i <(-b)». </p>
Очевидно, что у него есть более глубокое и подробное объяснение того, как работают лексический анализатор и парсер, но я думаю, что нет необходимости объяснять, чтобы ответить на ваш вопрос.
В резюме не имеет значения, был ли код написан как «i <- b» или «i <-b» или «i <- b ", потому что для лексического анализатора cSharp пробел не имеет значения" i <-B ". </p>
Ссылки: