RSparser user defined errors
От: raxxla  
Дата: 29.01.06 19:11
Оценка:
Доброго времени суток.

почему такой код:


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


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

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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: RSparser user defined errors
От: Lever Россия www.compassplus.ru
Дата: 01.02.06 04:31
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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


Может просто у опреаций is и as второй опреанд это первичное выражение, тогда можно ограничиться идентификатором с уточнениями или чем-то в скобках и до ? дела не дойдет.
Re[3]: RSparser user defined errors
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.02.06 17:12
Оценка:
Здравствуйте, Lever, Вы писали:

L>Может просто у опреаций is и as второй опреанд это первичное выражение, тогда можно ограничиться идентификатором с уточнениями или чем-то в скобках и до ? дела не дойдет.


Тут банальный LL(1)-конфликт. Для LR-анализа тут проблем нет. Но CocoR на базе которого создавался R# это построитель именно LL(1)-парсеров. Так что без ручного заглядывания вперед или нахождения хорошей эвристики тут не обойтись.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.