Re: RSparser user defined errors
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.01.06 12:58
Оценка:
Здравствуйте, raxxla, Вы писали:

R>
R>void Method1()
R>{
R>     object _obj=null;
R>     IEnumerable _list = _obj is IDictionary ? ((IDictionary)_obj).Values : (IEnumerable)_obj;
R>}
R>


R>вызывает сразу три ошибки при попытке скормить его RSparser-у??


Эта проблема уже обсуждалась недавно (http://rsdn.ru/Forum/Message.aspx?mid=1590718&only=1
Автор: VladD2
Дата: 14.01.06
). В грамматике C# 2.0 есть LL(1)-конфликт.

"IDictionary ?" может рассматриваться как анонимный тип "IDictionary?", или как "( ... IDictionary) ? ... : ...".

Я пока не придумал красивого метода разрешения этого конфликта. По уму нужно писать нехилое заглядывание вперед, но это куча работы, а у меня нет времени. Кто хочет может заняться.

Пока что можно просто взять условие в скобки. То есть, вот так:
IEnumerable _list = (_obj is IDictionary) ? ((IDictionary)_obj).Values : ...

все должно работать нормально.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.