Re: Refal -> Java? РефалАС-->АСАИЯ !


Subject: Re: Refal -> Java? РефалАС-->АСАИЯ !
From: Sergei M. Abramov (abram@botik.ru)
Date: Fri Dec 10 1999 - 19:58:57 MSK


День добрый, всем!

    Я не разделяю Сережиного оптимизма по поводу того, что ЯваАС без труда
может быть отображен в любой язык...

Это основной мотив возражений. Значит я что-то пропустил или не понимаю
проблемы.
Попробую "объясниться" еще раз.
Я считаю, что больше всего сил уйдет на проработку алгоритмов компиляции
простых но неэлементарных (не разложенных в виртуальный код)
Рефал-конструкций в последовательность императивных действий. Кто-то
возможно считает что "это-то как раз просто", а я так не считаю.
В первую очередь я думаю о компиляции конструкции "Источник:Образец" в
ПРИЛИЧНУЮ (эффективную) цепочку проверок длин, прямых доступов к термам,
прямым вырезкам подмассивов, и т.п.

И эти общие (для всех вариантов отображения Рефла в различные языки и
различные варианты отображения в Яву--с разлиным представлением выражений:
массив или Collection?) алгоритмы мне видятся как отдельная общая для всех
фаза.

Можно компилировать например в такой язык императивный:

e.JProgram = e.RefConstDefs eFuncDefs

t.FuncDef = (FDEF t.Name (e.ArgVars) (e.ResVars) (e.AuxVars) e.Ops)

e.Ops = /* empty */ | (LABEL t.LabelName) e.Ops | t.Op e.Ops

t.Op = (CALL e.Vars "<==" tName (e.Vars) IF-FAIL-JUMP t.LabelName)
       | (IF-GOTO t.Cond t.LabelName)
       | (ASSIGN t.Var t.RefOp)

t.Cond = (AND t.Cond t.Cond) | (OR t.Cond t.Cond) | (NOT t.Cond)
           | (INT-COMPARE t.IntCompOp t.Int t.Int),
"<" ">" "=" ">=" "=<" "<>" : e t.IntCompOp e
           | (EXP-COMPARE t.Var t.Var)
           | (TERM-IS-BR t.Var)

t.Int = ("+" t.Int t.Int) | s.Integer, <INT? s Integer> | (LENGTH t.Var)

t.RefExp = t.Var
              | (CONST t.Var) /* t.Var из e.RefConstDefs */
              | (TERM t.Var t.Int)
              | (SUB-EXP t.Var t.Int t.Int)
              | (UN-BR t.Var)
      |(BR t.Var)
      |(CONCAT e.Vars)

t.Var = (E t.Name) | (T t.Name)

Наверное я что-то пропустил. Но это близко к тому, что я имел в виду в
качестве ЯваАС.

Повторюсь, мне представляется, что:

    -1- больше всего сил уйдет на разработку компиляции конструкции
"Источник:Образец" в ПРИЛИЧНУЮ (эффективную) цепочку проверок длин, прямых
доступов к термам, прямым вырезкам подмассивов, и т.п. Конструкции "::" и
рефальские "управления" (переходы) вызывают меньше опасений. А вызовы
функций, конечно, надо полностью выносить (экскакация);

    -2- Главное решить -1-. Результат (этот самый смешной ЯваАС) можно
выдавать в любой язык (Ява, Си, С++, Т-язык) и при любом варианте
отображения данных (массивы, Collection, коарность как выдача массива или
оут-аргументы и т.п.). При этом во всех вариантах это будет задачка вида
"напишите красивую выдачу в конкретный синтаксис".

Сергей



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:58 MSD