Re: Refal+ abstract syntax


Subject: Re: Refal+ abstract syntax
From: Andrey Slepuhin (pooh@msu.ru)
Date: Tue Nov 23 1999 - 12:21:14 MSK


"Sergei M. Abramov" wrote:

> >6) Просьба особенно обратить внимание на следующие моменты:
> ...
> > - действительно ли даннное описание однозначно позволяет
> > произвести разбор программы? (т.е. не нужно ли где-нибудь
> > добавить ключевые слова или лишние скобки)
>
> Мне кажется, что контроль за однозначностью разбора программы сильно
> упростится, если нетерминалы снабдить рефальскими типами (s., t., v.,
> e.). В этом случае однозначность разбора можно определить как
> несовместность клэша двух разных алтернатив описания, что легко
> проверяется и формально (можно написать программу), и визуально...

Принято.

>
> Программа--терм, может быть считана одним <Read ...>

Согласен.

>
> * e.Program ::= t.ProgramItem | t.ProgramItem e.Program--
> * t.ProgramItem ::= t.FuncDef | t.BoxDef | t.TableDef | t.VectorDef
> * | t.StringDef
> + | t.ConstDef | t.Pragma | t.ImportDef | t.Export
>
> Пропущено:
> -- определение константы (тут возможна большая дискуссия--надо/не надо;

Я считаю, что в AS все константы уже вставлены по местам.

> -- прагмы ($trace, $traceall, думаю может быть полезна поддержка аналога
> #file/#line из Си--сохранять позиционирование на исходный текст, для
> поддержки серьеаных обработчиков/оптимайзеров и/или экранных
> отладчиков--трасировщиков с возможностью остановки брек-поинтов на ",",
> "=", "{" и т.п.;-),

Ну, об этом я пока не заботился, думаю что добавить подобные
возможности проблем не будет.

> -- импорт/экспорт.

Здесь надо подумать. Кстати, в Рефале+ нет спецификаций
импорта/экспорта как таковых, а считать глобальным все, что лежит
в .rfi-файле IMHO не есть правильно. И вообще модульность
в Рефале+ это слабое место.

>
> * t.FuncDef ::= ("Function" s.FunctionName (e.FunctionFormat)
> * (t.FunctionBody))
> * | ("Function?" s.FunctionName (e.FunctionFormat)
> * (t.FunctionBody))
>
> Можно опустить ВСЕ внутренние скобки (формат и так жесткий).
> И не только в этом месте. Это стало видно теперь, когда приписаны
> рефальские типы...

Ну, я иногда со скобками переусердствую :-)

> *
> * e.PAltBody ::= t.Sentence | t.Sentence e.BlockBody
>
> ? e.PAltBody : e.Empty может быть ?

Думаю, что вполне. Кстати, тут Аркадий Климов заметил явную
очепятку - вместо BlockBody естественно должно быть PAltBody

> # e.BlockBody ::= t.Path | t.Path e.BlockBody
>
> ? e.BlockBody : e.Empty может быть ?

Да.

>
> # e.ResultExpression ::= t.ResultTerm | t.ResultTerm e.ResultExpression
>
> ? ResultExpression : e.Empty может быть ? Кажется "да"...

Угу.

>
> * t.ResultTerm ::= t.Symbol | (e.ResultExpression) | t.Variable |
> * ("Call" s.FunctionName (e.ResultExpression))
>
> ? конечно в этом месте Рефал-?? потребует возможности опускать имя функции:
> ? < <GetFname> <GetFarg> > .... ?

А может быть это будет называться не "Call", а как-нибудь еще?

> >2) В файле не определены понятия Name - это по смыслу строка символов,
>
> А мне кажется--это символ-слово ;-)

А если кто-то будет генерировать программу в AS "на лету"?

> >
> >Буду крайне признателен за всяческую критику. Думаю, что до
> >семинара в понедельник можно успеть провести предварительное
> >обсуждение по почте, а на семинаре зафиксировать результаты.
>
> Увы, я поздно дополз до текста.

Это ничего. Все равно на семинаре не было общего обсуждения
(тем более что Романенко отсутствовал) и дискуссию перенесли
в mailing list.

Андрей.



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