Попытался попробовать макросы Nemerle, но попытка написать что-то свое сразу же привело к ошибке. Причем по исправлению нет никаких идей
Такой код:
using System.Console;
using Nemerle.Compiler;
macro BeginEnd (body)
syntax ("begin", body, "end")
{
<[
() // Пока все игнорируем, потом добавится что-то вроде $body
]>
}
WriteLine("Hello, World!");
begin
WriteLine("Hello, begin/end!"); // <--- 16-я строка
end;
в результате:
test.n:16:3:16:12: error: expected `;'
test.n:16:3:16:12: error: parse error near identifier `WriteLine': unexpected token after expression in sequence (you forget a closing bracket?).
Возникает вопрос: как это все можно отладить, чтобы увидеть то, что видит компилятор Nemerle???
Были варианты:
macro BeginEnd (body)
syntax ("begin", body, "end")
{
<[
$body
]>
}
macro BeginEnd (body)
syntax ("begin", body, "end")
{
<[
{
$body
}
]>
}
macro BeginEnd (body)
syntax ("begin", body, "end")
{
<[
def statement_body()
{
$body;
}
statement_body()
]>
}
Но такое ощущение, что даже после прочтения статей вообще непонятно, как оно все работает