очередные непонятки с макросами
От: Аноним  
Дата: 06.01.12 19:41
Оценка:
Почему
  class aa
  {
      gen val:int;
  }

выдает ошибку
Error 1 parse error near keyword `gen': expecting type declaration C:\Users\Администратор\Documents\Visual Studio 2008\Projects\ConsoleApplication7\ConsoleApplication7\Main.n 39 8 ConsoleApplication7

в то же время как внутри функции
  gen val:int;


работает вполне нормально

gen в принципе сейчас эквивалентен
      match(expr1)
      {

        | <[$per : $type ]> =>
 
           <[ mutable $per : $type; ]> 
     }
Re: очередные непонятки с макросами
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.12 22:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему

А>
А>  class aa
А>  {
А>      gen val:int;
А>  }
А>

А>выдает ошибку
А>Error 1 parse error near keyword `gen': expecting type declaration C:\Users\Администратор\Documents\Visual Studio 2008\Projects\ConsoleApplication7\ConsoleApplication7\Main.n 39 8 ConsoleApplication7

Макросы уровня выражения не могут расширять синтаксис вне выражения. Да и применяться вне выражения не могут.

Чтобы объявить синтаксис на уровне членов класса нужно создать макрос верхнего уровня (макроатрибот уровня метода) и в нем объявить синтаксис.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: очередные непонятки с макросами
От: Аноним  
Дата: 07.01.12 05:12
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Аноним, Вы писали:


А>>Почему

А>>
А>>  class aa
А>>  {
А>>      gen val:int;
А>>  }
А>>

А>>выдает ошибку
А>>Error 1 parse error near keyword `gen': expecting type declaration C:\Users\Администратор\Documents\Visual Studio 2008\Projects\ConsoleApplication7\ConsoleApplication7\Main.n 39 8 ConsoleApplication7

VD>Макросы уровня выражения не могут расширять синтаксис вне выражения. Да и применяться вне выражения не могут.


VD>Чтобы объявить синтаксис на уровне членов класса нужно создать макрос верхнего уровня (макроатрибот уровня метода) и в нем объявить синтаксис.

Вопрос в следующем, почему хотя задача очень похожа потребовалось делать много разных синтаксисов?
Re[3]: очередные непонятки с макросами
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.01.12 08:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос в следующем, почему хотя задача очень похожа потребовалось делать много разных синтаксисов?


Тут можно дать сразу два ответ.

С одной стороны вот так вот не лучшим образом спроектирован Немерле 1.

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

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

В Н2 подобные расширения будут делаться более очевидно. Вы будете просто говорить какое правило нужно расширить и чем. Но в любом случае один макрос не сможет быть применен для разных назначений. Ведь надо задавать расширяемое правило.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.