Известный Болтун
Зарегистрирован: 01 July 2006
Сообщения: 628
Примеры кода: 0
|
Re[4]: Баг в компиляторе или... |
23 January 2007 23:31 |
|
|
|
|
Здравствуйте, Алексей., Вы писали:
N>>Вопрос 1: Почему в safe-контексте компилятор пытается разобрать '&' как одноместный оператор?
А>При разборе грамматики никакого safe-контекста нет. Это контекст на уровне семантики, но не грамматики.
С этим трудно согласиться. В спецификации (Ecma-334, ISO/IEC 23270) утверждается так:
27.1 Unsafe contexts
The unsafe features of C# are available only in unsafe contexts. An unsafe context is introduced by
including an unsafe modifier in the declaration of a type or member, or by employing an unsafe-statement:
<skipped>
The associated grammar extensions are shown below. For brevity, ellipses (...) are used to represent
productions that appear in preceding clauses.
<skipped>
27.2 Pointer types
In an unsafe context, a type (§11) can be a pointer-type as well as a value-type, a reference-type, or a type parameter.
type:
value-type
reference-type
type-parameter
pointer-type
То есть unsafe-контекст вносит расширения именно в грамматику. Хотя, разумеется, они имеют и семантическое значение.
Я уверен, что вне unsafe-контекста не должно быть даже попыток разбирать соответствующие синтаксические продукции.
N>>Вопрос 2: Допустим, что в начале компилятор пытается разобрать '?' как часть тернарного оператора. Почему он не возвращается и не разбирает его по-другому (как nullable-sign), поcле того, как он не находит двоеточия?
А>Так реализован компилятор от Microsoft.
ИМХО, это ошибочная реализация.
P.S. Я нашел ту тему. Grammar ambiguities in C# 2.0
Данное сообщение получено с сайта RSDN
|
|