Как разобрать a op b
От: Аноним  
Дата: 24.08.13 12:10
Оценка:
1.
собственно операций может быть много
a+b
a ++--++ b и прочая
как разобрать выражение с ними
на сколько я понимаю
a+b не эквивалентно (_+_)(a,b)


2. будут ли эквивалентны ссылки на переменные def x1=1; def x2=x1+1;
Re: Как разобрать a op b
От: CodingUnit Россия  
Дата: 24.08.13 12:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>1.

А>собственно операций может быть много
А>a+b
А>a ++--++ b и прочая
А>как разобрать выражение с ними
А>на сколько я понимаю
А>a+b не эквивалентно (_+_)(a,b)


А>2. будут ли эквивалентны ссылки на переменные def x1=1; def x2=x1+1;


операторы парсером преобразуются в выражения типа PExpr.Call("+", [PExpr.Ref(a), PExpr.Ref(b)]). Вы сами наберите входные выражения в макрос и посмотрите в отладчике какие выражения получаются и соответственно их обрабатывайте. Если вы будете для выходного кода по имени x1 использовать локальную область видимости usesite то компилятор поймет к какой переменной будет идти обращение, ссылки на переменные будут ссылаться на ближайшее совпадение в таком случае. Экспериментируйте, смотрите под отладчиком, и сами во всем разберетесь.
Re: Как разобрать a op b
От: _NN_ www.nemerleweb.com
Дата: 24.08.13 13:24
Оценка:
Здравствуйте, Аноним, Вы писали:

Кстати а обязательно макрос ?
В Nemerle можно объявлять свои операции для любого типа:
class A
{
  public static @++++----(l : A, r : A) : A { A() }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Как разобрать a op b
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.13 21:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>1.

А>собственно операций может быть много
А>a+b
А>a ++--++ b и прочая
А>как разобрать выражение с ними
А>на сколько я понимаю
А>a+b не эквивалентно (_+_)(a,b)

| <[ $op($a, $b) ]> =>


А>2. будут ли эквивалентны ссылки на переменные def x1=1; def x2=x1+1;


Они и ссылками то не будут. Это просто имена которые еще нужно связать. Вот после типизации — да. Но это уже будет не PExpr, а TExpr. Кроме того типизацию еще нужно правильно провести. В Немерле есть отложенный вывод типов. По сему просто вызов:
def typed = typer.TypeExpr(expr);

не гарантирует, что все типы будут выведены.
Подробности см. в статье
Автор(ы): Владислав Юрьевич Чистяков
Дата: 03.09.2009
В данной части статьи рассказывается о том, как работает система вывода типов Nemerle, о том, как с ней могут взаимодействовать макросы Nemerle, и что это дает
на этом форуме.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.