Ваяю тут DSL на русском. Цель — небольшой язык для описания превращения данных в отчеты.
Использую возможность немерла компилировать код в файле как один метод Main. Сам файл препроцессинговой обработке не подвергаю, все что мне нужно делаю из макросов уровня выражения. Не хочу терять локейшены или мудрить с ними.
Проблема в простых типах: int, string, можно ли зарегистрировать какой-то обработчик, который навешает на них русские алиасы? Регистрацию хотелось бы делать из макроса уровня выражения или при инициализации компилятора.
Здравствуйте, 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 : Строка = "";
}
}
Здравствуйте, _NN_, Вы писали:
Z>>Проблема в простых типах: int, string, можно ли зарегистрировать какой-то обработчик, который навешает на них русские алиасы? Регистрацию хотелось бы делать из макроса уровня выражения или при инициализации компилятора.
_NN>Я понимаю задача сводится к тому чтобы из макроса вызвать код
_NN>_NN>type Целое = int;
_NN>type Строка = string;
_NN>
_NN>В чем проблема сделать это в макросе ?
Супер, спасибо! Совершенно не ожидал, что это прокатит, настолько, что даже не попробовал.