Н2, что нового?
От: Аноним  
Дата: 11.03.14 06:24
Оценка:
прошло уже почти 2 месяца с последних комментариев
Re: Н2, что нового?
От: hardcase Пират http://nemerle.org
Дата: 11.03.14 11:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>прошло уже почти 2 месяца с последних комментариев


Сделали поддержку квазицитирования для грамматик.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Н2, что нового?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.03.14 23:31
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Сделали поддержку квазицитирования для грамматик.


Как это выглядит?
Re[3]: Н2, что нового?
От: hardcase Пират http://nemerle.org
Дата: 12.03.14 10:34
Оценка:
Здравствуйте, nikov, Вы писали:

N>Как это выглядит?


Играюсь с синтаксическими трансформациями C#. "quote match" — макрос для паттернматчинга AST. "quote <# #>" — макрос, согдающий ветку AST.
AstVisitor — ходилка по деревяшке. Если какая-то ветка при обходе была модифицирована, все остальные выше по иерархии будут пересозданы (процесс пересоздания автоматизирован).

internal sealed class CSharpVisitor : AstVisitor
{
  public override Visit(ast : Ast) : Ast
  {
    def newAst = quote match (ast)
    {
      | <# Statement: $LocalVariableType(_) $Name(varName) = $(expr1).Where($Name(item) => $Expression(pred)); #> =>
      
        quote <# Statement:
          {
            List<object> $Name(varName) = new List<object>();
            foreach (var $Name(item) in $Expression(expr1))
            {
              if ($BooleanExpression(pred))
              {
                $Identifier(varName).Add($Identifier(item));
              }
            }
          }
        #>;

      | <# Expression: 0 #> => quote <# Expression: 1 - 1 #>;
      | x => x
    }
    newAst.Apply(this)
  }
}
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.