Что это за List?
От: Mumitroller Беларусь  
Дата: 03.01.11 08:36
Оценка: 10 (1)
Добрый день.

Наткнулся на проблему при использовании Peg — при компиляции выдается ошибка:

The return type of rule 'rule12' is 'System.Collections.Generic.List[int]', but require type is 'List[int]'. All entries in one OrderedChoice must have same return type.

Может быть кто-нибудь подскажет, что это за List[int] и где он находится? Я посмотрел в генерируемый код, но не нашел там никаких других списков, кроме SCG.List.

    [PegGrammar(
        rule1,
        grammar
        {
            rule1 : SCG.List[int] = rule11+ / rule12;
            rule11 : int = any;
            rule12 : SCG.List[int] = any;
            any = ['\u0000'..'\uFFFF'];
        }
    )]
    class Parser
    {
        rule1(@list : SCG.List[int]) : SCG.List[int]
        {
            @list;
        }
        
        rule11(_ : NToken) : int
        {
            1;
        }
        
        rule12(_ : NToken) : SCG.List[int]
        {
            SCG.List();
        }
    }


Спасибо.

PS: Поздравляю всех с наступившим Новым Годом!

Mumitroller.
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re: Что это за List?
От: Аноним  
Дата: 03.01.11 10:40
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Добрый день.


M>Наткнулся на проблему при использовании Peg — при компиляции выдается ошибка:


M>The return type of rule 'rule12' is 'System.Collections.Generic.List[int]', but require type is 'List[int]'. All entries in one OrderedChoice must have same return type.


Это баг, похоже там слишком примитивная проверка на соответствие типов в операторе приоритетного выбора.
Re: Что это за List?
От: WolfHound  
Дата: 03.01.11 11:08
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Наткнулся на проблему при использовании Peg — при компиляции выдается ошибка:

M>The return type of rule 'rule12' is 'System.Collections.Generic.List[int]', but require type is 'List[int]'. All entries in one OrderedChoice must have same return type.
Очень злая бага. Буду чинить.
Пока можно использовать обходной маневр.
            rule1 : SCG.List[int] = rule11p / rule12;
            rule11p : SCG.List[int] = rule11+;
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Что это за List?
От: WolfHound  
Дата: 03.01.11 11:41
Оценка: 3 (1)
Здравствуйте, Mumitroller, Вы писали:

M>Наткнулся на проблему при использовании Peg — при компиляции выдается ошибка:

Починил. http://code.google.com/p/nemerle/source/detail?r=9496

ЗЫ Что-то у гугла diff'ы глючат.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Что это за List?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.11 14:25
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>The return type of rule 'rule12' is 'System.Collections.Generic.List[int]', but require type is 'List[int]'. All entries in one OrderedChoice must have same return type.

M>Может быть кто-нибудь подскажет, что это за List[int] и где он находится? Я посмотрел в генерируемый код, но не нашел там никаких других списков, кроме SCG.List.

Хотя это и оказался баг в PegGrammar, но мое чутье подсказывает, что кроме всего прочего присутствует ошибка и в грамматике. Больно уж странно, что не циклическому правилу требуется возвращать список.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Что это за List?
От: Mumitroller Беларусь  
Дата: 03.01.11 15:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Хотя это и оказался баг в PegGrammar, но мое чутье подсказывает, что кроме всего прочего присутствует ошибка и в грамматике. Больно уж странно, что не циклическому правилу требуется возвращать список.


Это правило не циклическое только снаружи, а внутри оно очень даже циклическое. Что-то вроде:

rule = "keyword" ident ("," ident)*;


Mumitroller.
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re[3]: Что это за List?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.11 16:44
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Это правило не циклическое только снаружи, а внутри оно очень даже циклическое. Что-то вроде:


M>
M>rule = "keyword" ident ("," ident)*;
M>


Вот это очень странно. Явно что-то не так. Обычно так не бывает. В чойсы попадают уже сформированные значения, а не результаты циклов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.