Ресолв типа
От: Ziaw Россия  
Дата: 10.04.13 09:11
Оценка:
Ваяю тут DSL на русском. Цель — небольшой язык для описания превращения данных в отчеты.

Использую возможность немерла компилировать код в файле как один метод Main. Сам файл препроцессинговой обработке не подвергаю, все что мне нужно делаю из макросов уровня выражения. Не хочу терять локейшены или мудрить с ними.

Проблема в простых типах: int, string, можно ли зарегистрировать какой-то обработчик, который навешает на них русские алиасы? Регистрацию хотелось бы делать из макроса уровня выражения или при инициализации компилятора.
Re: Ресолв типа
От: _NN_ www.nemerleweb.com
Дата: 10.04.13 10:11
Оценка: 20 (2)
Здравствуйте, Ziaw, Вы писали:

Z>Проблема в простых типах: int, string, можно ли зарегистрировать какой-то обработчик, который навешает на них русские алиасы? Регистрацию хотелось бы делать из макроса уровня выражения или при инициализации компилятора.


Я понимаю задача сводится к тому чтобы из макроса вызвать код
type Целое = int;
type Строка = string;


В чем проблема сделать это в макросе ?
Макрос:
using Nemerle;
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;

namespace MacroLibrary1
{
  public macro Macro1()
  {
    A.F(Macros.ImplicitCTX());
  }
  
  module A
  {
    public F(t : Typer) : PExpr
    {
      t.Env.Define(<[ decl: type Целое = int; ]>).Compile();
      t.Env.Define(<[ decl: type Строка = string; ]>).Compile();
      <[ ]>
    }
  }
}


Тест:
using System;
using MacroLibrary1;

module Program
{
  Main() : void
  {
    Macro1();
    
    def x : Целое = 1;
    def y : Строка = "";
  }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Ресолв типа
От: Ziaw Россия  
Дата: 11.04.13 01:34
Оценка:
Здравствуйте, _NN_, Вы писали:

Z>>Проблема в простых типах: int, string, можно ли зарегистрировать какой-то обработчик, который навешает на них русские алиасы? Регистрацию хотелось бы делать из макроса уровня выражения или при инициализации компилятора.


_NN>Я понимаю задача сводится к тому чтобы из макроса вызвать код

_NN>
_NN>type Целое = int;
_NN>type Строка = string;
_NN>


_NN>В чем проблема сделать это в макросе ?


Супер, спасибо! Совершенно не ожидал, что это прокатит, настолько, что даже не попробовал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.