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