Молчун
Зарегистрирован: 01 March 2005
Сообщения: 19
Примеры кода: 0
|
Re[3]: Баг в компиляторе или... |
23 January 2007 12:25 |
|
|
|
|
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, Алексей., Вы писали:
А>>Разрешение данной неоднозначности никак не специфицировано в стандарте. Так что поведение может быть любым. Проблема разрешения данной неоднозначности уже всплывала на rsdn. В ходе дискусии так ни к чему и не пришли.
N>Но все-таки, если рассматривать именно тот код, который я привел в начале, возникает ряд вопросов.
N>Вопрос 1: Почему в safe-контексте компилятор пытается разобрать & как одноместный оператор?
N>Вопрос 2: Допустим, что в начале компилятор пытается разобрать ? как часть тернарного оператора. Почему он не возвращается и не разбирает его по-другому (как nullable-sign), поле того, как он не находит двоеточия?
Возможно, что для того, чтобы это сделать грамматика должна быть контектно-зависимой (или просто шире классов LL(1), LR(1)). В большинстве случаев это непрактично из-за того, что разбор, возможно, потребует больше времени, чем O ; либо таблицы переходов будут занимать много места; либо еще какие-то технические причины. Даже если машина и в состоянии эффективно обработать сложные грамматики, человек сложный язык может и не распарсить, и это будет чревато ошибками. Так например, на Фортране такое выражение
FOR I=1,12
означало начало цикла FOR с счетчиком I от 1 до 12. А вот такое
FOR I=1.12
присваивание переменной FORI значния 1.12
Похдод Do What I Mean часто оказывается "медвежьей услугой".
Данное сообщение получено с сайта RSDN
|
|