вопросу по дизайну нитры
От: Аноним  
Дата: 19.11.13 18:41
Оценка:

Add    = Expression sm '+' sm Expression    precedence 10
      {
        override Value = Expression1.Value() + Expression2.Value();
      }


имена по умолчанию Expression2, Expression1 всегда зло (наверно?) будет ли от них отход?
Re: вопросу по дизайну нитры
От: hardcase Пират http://nemerle.org
Дата: 19.11.13 20:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>имена по умолчанию Expression2, Expression1 всегда зло (наверно?) будет ли от них отход?


Add    = Foo=Expression sm '+' sm Bar=Expression   precedence 10
      {
        override Value = Foo.Value() + Bar.Value();
      }
/* иЗвиНите зА неРовнЫй поЧерК */
Re: вопросу по дизайну нитры
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.13 04:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>имена по умолчанию Expression2, Expression1 всегда зло (наверно?)


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

Проблем вроде случайного изменения ссылок в следствии переупорядочивания правил, на практике, не возникает, так как грамматики упорядочены по смыслу, а не прихоти человека (как это происходит с параметрами методов или свойствами в классах).

А>будет ли от них отход?


Нет. Найденное решение показало себя отлично. Идти на поводу мифов нет никакого смысла.

Кому хочется — могут ввести имена явно. Автоматическая нумерация полей для одинаковых подправил просто позволяет не делать лишних телодвижений при разработке грамматик и иметь компактный синтаксиса.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: вопросу по дизайну нитры
От: Аноним  
Дата: 20.11.13 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:
В нитре для разбора даже очень короткой строки создаеться достаточно большой массив ast
например для "+(1,1,1)*2+7*2-88+22*1+ +(4,4,4)-11+45" размер массива уже ast 855 и memoized 39
а для "+(1,1,1)*2+7*2-88+22*1+ +(4,4,4)-11+45-1" размер массива уже ast 900 и memoized 41
а для "+(1,1,1)*2+7*2-88+22*1+ +(4,4,4)-11+45-1-1" размер массива уже ast 945 и memoized 43

т.е. увеличение кода на 2 символа приводит к росту таблицы аст на 45+2 интов.

Памяти хватит?
Re[2]: вопросу по дизайну нитры
От: Аноним  
Дата: 20.11.13 07:35
Оценка:
Здравствуйте, Аноним, Вы писали:

Увеличение в 47*4/(2*2)= в 47 раз. для исходника в 5 мегабайт потребуется примерно 250 метров.
Re: вопросу по дизайну нитры
От: Аноним  
Дата: 20.11.13 10:00
Оценка:
Здравствуйте, Аноним, Вы писали:


MulDiv = Exp1=Expression sm Exp2=((Mul sm Expression)*) precedence 20


выраженеи разбора 7/7/7/7 результат 1

при этом получается в Exp2 список размером 1, в первый член которого вложена ссылка на 7/7/7 и т д
Re[3]: вопросу по дизайну нитры
От: hardcase Пират http://nemerle.org
Дата: 20.11.13 16:29
Оценка: -1 :)
Здравствуйте, Аноним, Вы писали:

А>Увеличение в 47*4/(2*2)= в 47 раз. для исходника в 5 мегабайт потребуется примерно 250 метров.


Оптимизацией использования памяти ещё просто не занимались.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: вопросу по дизайну нитры
От: WolfHound  
Дата: 20.11.13 17:44
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Оптимизацией использования памяти ещё просто не занимались.

Занимались. Просто у него почти все токены из одного символа.
Тут любой АСТ такого размера будет.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.