[PEG] Перегруженные обработчики для правил приоритетного выб
От: Mumitroller Беларусь  
Дата: 03.01.11 11:22
Оценка:
Добрый день.

Сейчас перегруженные обработчики для правил приоритетного выбора не разрешены, хотя, как мне кажется, было бы очень удобно иметь такую возможность. Вопрос просто из интереса — чем вызвано такое ограничение? Просто не хватило времени сделать или есть какие-то принципиальные проблемы?

Примечание: я знаю, что аналогичный результат можно легко получить добавлением промежуточных правил, в которых будут преобразовываться типы значений. Но эти правила замусоривают грамматику и могут затруднять понимание.

Mumitroller
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re: [PEG] Перегруженные обработчики для правил приоритетного
От: WolfHound  
Дата: 03.01.11 11:27
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Сейчас перегруженные обработчики для правил приоритетного выбора не разрешены, хотя, как мне кажется, было бы очень удобно иметь такую возможность. Вопрос просто из интереса — чем вызвано такое ограничение? Просто не хватило времени сделать или есть какие-то принципиальные проблемы?

M>Примечание: я знаю, что аналогичный результат можно легко получить добавлением промежуточных правил, в которых будут преобразовываться типы значений. Но эти правила замусоривают грамматику и могут затруднять понимание.
Ничего не понял.
Покажи код который ты хочешь получить.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: [PEG] Перегруженные обработчики для правил приоритетн
От: hardcase Пират http://nemerle.org
Дата: 03.01.11 11:38
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ничего не понял.

WH>Покажи код который ты хочешь получить.

Для грамматики:

a : A = ...
b : B = ...
c : C =  a / b


Обработчики правила c:
c(a : A) : C { /* изготавливаем С из A */ }

c(b : B) : C { /* изготавливаем С из B */ }
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: [PEG] Перегруженные обработчики для правил приоритетн
От: Mumitroller Беларусь  
Дата: 03.01.11 11:42
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ничего не понял.

WH>Покажи код который ты хочешь получить.

Прошу прощения. Как-то так:

rule1 : int = rule11 / rule12;
rule11 : int = ...;
rule12 = ...;


То есть rule11 имеет тип int, а rule12 — NToken, что приведет к ошибке во время компиляции.

Если бы можно было задать два обработчика, то такие правила было бы проще описывать:

rule1(_ : int) : int
{
  ...
}

rule1(_ : NToken) : int
{
  ...
}


Mumitroller.
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re[3]: [PEG] Перегруженные обработчики для правил приоритетн
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.11 14:33
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Если бы можно было задать два обработчика, то такие правила было бы проще описывать:


M>
M>rule1(_ : int) : int
M>{
M>  ...
M>}

M>rule1(_ : NToken) : int
M>{
M>  ...
M>}
M>


Это усложнит систему и сделает ее менее понятной. Причем, на практике, выгоды от этого никакой не будет. Что так два обработчика, что так.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [PEG] Перегруженные обработчики для правил приоритетн
От: Mumitroller Беларусь  
Дата: 03.01.11 15:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это усложнит систему и сделает ее менее понятной. Причем, на практике, выгоды от этого никакой не будет. Что так два обработчика, что так.


Обработчика действительно понадобится по 2 в обоих вариантах. Но в случае, когда разрешен overload обработчиков, не понадобится дополнительное правило, которое нужно только для преобразования типа. То есть грамматика будет проще. Но это не критично.

Mumitroller.
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re[5]: [PEG] Перегруженные обработчики для правил приоритетн
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.01.11 16:42
Оценка:
Здравствуйте, Mumitroller, Вы писали:

M>Обработчика действительно понадобится по 2 в обоих вариантах. Но в случае, когда разрешен overload обработчиков, не понадобится дополнительное правило, которое нужно только для преобразования типа. То есть грамматика будет проще. Но это не критично.


Мы планировали автоматически генерировать правило для самого choice-а, которое просто возвращает значение своего параметра.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [PEG] Перегруженные обработчики для правил приоритетн
От: WolfHound  
Дата: 03.01.11 16:53
Оценка: 82 (3)
Здравствуйте, VladD2, Вы писали:

VD>Мы планировали автоматически генерировать правило для самого choice-а, которое просто возвращает значение своего параметра.

Я в этом мегакомите http://code.google.com/p/nemerle/source/detail?r=9495 сделал что для таких правил если обработчика нет то его просто не вызывают.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: [PEG] Перегруженные обработчики для правил приоритетн
От: hardcase Пират http://nemerle.org
Дата: 03.01.11 21:46
Оценка: 50 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, VladD2, Вы писали:


VD>>Мы планировали автоматически генерировать правило для самого choice-а, которое просто возвращает значение своего параметра.

WH>Я в этом мегакомите http://code.google.com/p/nemerle/source/detail?r=9495 сделал что для таких правил если обработчика нет то его просто не вызывают.

В связи с этим изменением отрефакторил парсер C#.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: [PEG] Перегруженные обработчики для правил приоритетн
От: WolfHound  
Дата: 03.01.11 22:55
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В связи с этим изменением отрефакторил парсер C#.

Еще можно сделать вот такие методы не обязательными:
    private parenthesesExpr(_ : NToken, se : int, _ : NToken) : int
    {
      se
    }

Те если один из параметров совпадает с возвращением значением, а остальные NToken.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: [PEG] Перегруженные обработчики для правил приоритетн
От: hardcase Пират http://nemerle.org
Дата: 03.01.11 23:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Те если один из параметров совпадает с возвращением значением, а остальные NToken.


ОК. Такой код я не проверял (хотя подозревал), но точное поведение стоит задокументировать.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[10]: [PEG] Перегруженные обработчики для правил приоритет
От: WolfHound  
Дата: 03.01.11 23:16
Оценка:
Здравствуйте, hardcase, Вы писали:

H>ОК. Такой код я не проверял (хотя подозревал), но точное поведение стоит задокументировать.

Такой код сейчас не работает.
Я говорю о том надо это делать или нет?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: [PEG] Перегруженные обработчики для правил приоритет
От: hardcase Пират http://nemerle.org
Дата: 03.01.11 23:25
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, hardcase, Вы писали:


H>>ОК. Такой код я не проверял (хотя подозревал), но точное поведение стоит задокументировать.

WH>Такой код сейчас не работает.
WH>Я говорю о том надо это делать или нет?
Уже заметил.
Вот такие обработчики есть в C#:
    //fromClause    : QueryExpr = "from"S (fromClause_1 / fromClause_2);
    fromClause(_from : NToken, opt : QueryExpr) : QueryExpr
    {
      opt
    }


    //newExpression : Expr = "new"S (newObject_1 / newArray_1 / newArray_2 / newObject_2 / newArray_3 / newAnonymous);
    newExpression(_new  : NToken,
                  opt   : Expr) : Expr
    {
      opt
    }
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: [PEG] Перегруженные обработчики для правил приоритетн
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.01.11 00:19
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, hardcase, Вы писали:


H>>В связи с этим изменением отрефакторил парсер C#.

WH>Еще можно сделать вот такие методы не обязательными:
WH>
WH>    private parenthesesExpr(_ : NToken, se : int, _ : NToken) : int
WH>    {
WH>      se
WH>    }
WH>

WH>Те если один из параметров совпадает с возвращением значением, а остальные NToken.

А вот это зря. Тут может быть потеря информации о местоположениях.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [PEG] Перегруженные обработчики для правил приоритетн
От: para  
Дата: 04.01.11 06:35
Оценка: +2
Здравствуйте, WolfHound, Вы писали:
WH>Еще можно сделать вот такие методы не обязательными:
WH>
WH>    private parenthesesExpr(_ : NToken, se : int, _ : NToken) : int
WH>    {
WH>      se
WH>    }
WH>

WH>Те если один из параметров совпадает с возвращением значением, а остальные NToken.

есть правила типа
    private unaryMinus(_ : NToken, se : int) : int
    {
      -se
    }

которые по неосторожности можно забыть. тогда компилятор не отловит ошибку.

считаю что лучше сделать спец. синтаксис в грамматике или в теле класса для сокращений
Re[10]: [PEG] Перегруженные обработчики для правил приоритет
От: hardcase Пират http://nemerle.org
Дата: 04.01.11 08:44
Оценка:
Здравствуйте, para, Вы писали:

P>считаю что лучше сделать спец. синтаксис в грамматике или в теле класса для сокращений


Тогда легче просто не поддерживать этот случай. Спец.синтаксис еще нужно помнить и рассказывать он нем людям.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: [PEG] Перегруженные обработчики для правил приоритет
От: para  
Дата: 04.01.11 09:02
Оценка: +1
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, para, Вы писали:


P>>считаю что лучше сделать спец. синтаксис в грамматике или в теле класса для сокращений


H>Тогда легче просто не поддерживать этот случай. Спец.синтаксис еще нужно помнить и рассказывать он нем людям.


я имел в виду одно ключевое слово, например атрибут в грамматике. это и задокументировать несложно и сократит копи-паст)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.