Re: Case-sensitive Refal+


Andrey Slepuhin (pooh@msu.ru)
Thu, 02 Dec 1999 02:54:32 +0300


Andrey Slepuhin wrote:
>
> Добрый день всем!
>
> Я в процессе того, чтобы сделать Рефал+ полностью case-sensitive.

Процесс в первом приближении закончен (т.е. все работает, но
кому-нибудь что-нибудь может не понравиться).
Итак, отличия case-sensitive Рефала+:

1) Все ключевые слова набираются _только_ маленькими буквами
   (т.е. $use, $box, но не $Use, $BOX)

2) Имена модулей _строго_ соответствуют именам .rfi-файлов,
   т.е. описания функций из модуля Abc лежат в файле Abc.rfi,
   а никак не в abc.rfi или ABC.rfi.

3) Имена стандартных модулей зафиксированы как
   Access Apply Arithm Bit Box Class Compare Convert
   Dos StdIO String Table Vector

4) Имена символов из стандартных модулей зафиксированы как

Access.rfi:
-----------
$func Length e.Exp = s.ExpLen;
$func? Left s.Left s.Len e.Exp = e.SubExp;
$func? Right s.Right s.Len e.Exp = e.SubExp;
$func? Middle s.Left s.Right e.Exp = e.SubExp;
$func? L s.Left e.Exp = t.SubTerm;
$func? R s.Right e.Exp = t.SubTerm;

Apply.rfi:
----------
$func? Apply s.Name e.Exp = e.Exp;

Arithm.rfi:
-----------
$func "+" s.Int1 s.Int2 = s.Int;
$func "-" s.Int1 s.Int2 = s.Int;
$func "*" s.Int1 s.Int2 = s.Int;
$func Div-Rem s.Int1 s.Int2 = s.Quo s.Rem;
$func Div s.Int1 s.Int2 = s.Quo;
$func Rem s.Int1 s.Int2 = s.Rem;
$func GCD s.Int1 s.Int2 = s.Gcd;

Bit.rfi:
--------
$func Bit-Or s.Int1 s.Int2 = s.Int;
$func Bit-And s.Int1 s.Int2 = s.Int;
$func Bit-Xor s.Int1 s.Int2 = s.Int;
$func Bit-Not s.Int = s.Int;
$func Bit-Left s.Int s.Shift = s.Int;
$func Bit-Right s.Int s.Shift = s.Int;
$func? Bit-Test s.Int s.Pos = ;
$func Bit-Set s.Int s.Pos = s.Int;
$func Bit-Clear s.Int s.Pos = s.Int;
$func Bit-Print s.Int = ;
$func Bit-Length s.Int = s.Len;

Box.rfi:
--------
$func Box e.Exp = s.Box;
$func ? s.Box = e.Exp;
$func Store s.Box e.Exp = ;

Class.rfi:
----------
$func? Box? e.Exp = ;
$func? Channel? e.Exp = ;
$func? Char? e.Exp = ;
$func? Digit? e.Exp = ;
$func? Func? e.Exp = ;
$func? Int? e.Exp = ;
$func? Letter? e.Exp = ;
$func? String? e.Exp = ;
$func? Table? e.Exp = ;
$func? Vector? e.Exp = ;
$func? Word? e.Exp = ;

Compare.rfi:
------------
$func? ">=" (e.Exp1)(e.Exp2) = ;
$func? ">" (e.Exp1)(e.Exp2) = ;
$func? "<=" (e.Exp1)(e.Exp2) = ;
$func? "<" (e.Exp1)(e.Exp2) = ;
$func? "/=" (e.Exp1)(e.Exp2) = ;
$func? "=" (e.Exp1)(e.Exp2) = ;
$func Compare (e.Exp1)(e.Exp2) = s.Res; * '<', '>', '='

Convert.rfi:
------------
$func Chars-To-Bytes e.Int = e.Char;
$func Bytes-To-Chars e.Char = e.Int;
$func To-Lower e.Char = e.Char;
$func To-Upper e.Char = e.Char;
$func? To-Int e.Exp = s.Int;
$func To-Chars e.Exp = e.Char;
$func To-Word e.Exp = s.Word;

Dos.rfi:
--------
$func Arg s.Int = e.Arg;
$func GetEnv e.VarName = e.Value;
$func Time = e.String;
$func Exit s.ReturnCode = ;
$func Delay s.Interv = ;
$func Sleep s.Interv = ;
$func Random s.Limit = s.Rand; /* 0 <= s.Rand < s.Limit */
$func Randomize = ;

StdIO.rfi:
----------
$channel StdIn StdOut StdErr;
$func Channel = s.Channel;
$func? Open-File s.Channel e.FileName s.Mode = ;
$func Close-Channel s.Channel = ;
$func Parse-File-Name e.FileName = s.DriveWord s.PathWord s.NameWord
s.ExtWord;
$func? Erase-File e.FileName = ;
$func? EOF? s.Channel = ;
$func? Read = t.Term;
$func? Read-Char = s.Char;
$func? Read-Line = e.Char;
$func Write e.Expr = ;
$func WriteLN e.Expr = ;
$func Print e.Expr = ;
$func PrintLN e.Expr = ;
$func? Read! s.Channel = t.Term;
$func? Read-Char! s.Channel = s.Char;
$func? Read-Line! s.Channel = e.Char;
$func Write! s.Channel e.Expr = ;
$func WriteLN! s.Channel e.Expr = ;
$func Print! s.Channel e.Expr = ;
$func PrintLN! s.Channel e.Expr = ;

String.rfi:
-----------
$func String e.Source = s.String;
$func String-Init s.String s.Len s.Fill = ;
$func String-Fill s.String s.Fill = ;
$func String-Length s.String = s.Len;
$func String-Ref s.String s.Index = s.Char;
$func String-Set s.String s.Index s.Char = ;
$func String-Replace s.String e.Source = ;
$func Substring s.String s.Index s.Len = s.NewString;
$func Substring-Fill s.String s.Index s.Len s.Fill = ;

Table.rfi:
----------
$func Table = s.Tab;
$func Bind s.Tab (e.Key) (e.Val) = ;
$func Unbind s.Tab e.Key = ;
$func Table-Copy s.Tab = s.TabCopy ;
$func Replace-Table s.TargetTab s.SourceTab = ;
$func? Lookup s.Tab e.Key = e.Val;
$func? In-Table? s.Tab e.Key = ;
$func? Domain s.Tab = e.KeyList ;

Vector.rfi:
-----------
$func Vector e.Source = s.Vector;
$func Vector-To-Exp s.Vector = e.Exp;
$func Vector-Init s.Vector s.Len e.Fill = ;
$func Vector-Fill s.Vector e.Fill = ;
$func Vector-Length s.Vector = s.Len;
$func Vector-Ref s.Vector s.Index = e.Exp;
$func Vector-Set s.Vector s.Index e.Exp = ;
$func Vector-Replace s.Vector e.Source = ;
$func Subvector s.Vector s.Index s.Len = s.NewVector;
$func Subvector-Fill s.Vector s.Index s.Len e.Fill = ;

5) Добавлен ключик -i у rfp и rfpc. С этим ключиком все работает
   как раньше, в case-insensitive режиме.

Если у кого-нибудь есть замечания/предложения/пожелания - пишите.
Я собираюсь все выложить, как только Сергей (Битюков) исправит
кое-какие ошибки по его части и проверит, что все работает под Win32.

Всего доброго,
Андрей.



This archive was generated by hypermail 2.0b3 on Thu Dec 02 1999 - 02:55:24 MSK