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