Почему парсить C++ трудно
Oct. 29th, 2015 04:38 amИзвестно, что компилятору языка C++ работать существенно сложнее, чем, скажем, компилятору Java, потому что его парсеру часто приходится „заглядывать вперед“. Давайте разберемся, как это.
Вот фрагмент из Михаила Щербакова:
«[Балаган] летит и в холод, и в жару, и в гром, и в тишину.»
Разбираем. Глагол «летит». Дальше: винительный падеж, винительный падеж, винительный падеж, винительный падеж. Стоп, стоп. «В тишину» – не подходит ведь по семантике. Должно было быть «летит в тишине». А если «летит в тишину», то это ответ на вопрос «куда?». Значит все до этого – это было перечисление того, куда летит Балаган? Ему предстоят холод, жара, гром и тишина? Вот облом, теперь, значит, придется забывать все накопленные впечатления от строки и начинать разбор с начала.
Примерно так. Человеку эта игра слов может показаться забавной, ну а компилятору – нет.
no subject
Date: 2015-10-29 01:43 pm (UTC)no subject
Date: 2015-11-02 04:11 am (UTC)no subject
Date: 2015-11-02 08:47 am (UTC)И в году 52 недели, но что с того.
no subject
Date: 2015-11-02 09:15 am (UTC)no subject
Date: 2015-11-02 09:34 pm (UTC)2) в холод/жару/гром - это при каких обст-вах, во время какой обстановки вокруг. Почему это нормативные словоупотребления, а "в тишину" - нет, не знаю, но могу высказать гипоте(ну)зу. Нормативное употребление этой конструкции - это когда обозначаемое обстоятельство хоть как-то нештатно. В войну, в эпидемию холеры, в дождь, в засуху. В мир вот нет почему-то. С уточнениями есть: в мирное время, в хорошую погоду.
no subject
Date: 2015-11-02 09:40 pm (UTC)