Commit 520f0655 authored by Denis Budyak's avatar Denis Budyak

Движется документирование. Удалил немного закомментированного кода

parent b2592272
MODULE НяМ;
(** Константы, описывающие Машину **)
(**** Константы, описывающие Машину
Вычитывание_исходного_текста_модуля_из_отображения
Контрольная_сумма_файла
Компактный_формат_ввода_вывода
Чтение_простых_типов_из_символьного_файла
Запись_простых_типов_в_символьный_файл
Запись_объектного_файла
*)
IMPORT SYSTEM, Kernel, Files, Stores, Models, TextModels, StdLog, DevMarkers, Dialog;
......@@ -108,9 +115,13 @@ MODULE НяМ;
lastpos: INTEGER;
ObjFName: Files.Name;
in: TextModels.Reader;
oldSymFile, symFile, objFile: Files.File;
inSym: Files.Reader;
in: TextModels.Reader; (* Поток чтения исходного текста модуля из отображения *)
oldSymFile (* существующий файл символьной информации *)
, symFile
, objFile: Files.File;
ОбъектЧтенияФайлаСимволов: Files.Reader;
outSym, outObj: Files.Writer;
errNo, errPos: ARRAY maxErrors OF INTEGER;
......@@ -120,10 +131,13 @@ MODULE НяМ;
crc32tab: ARRAY 256 OF INTEGER;
(*** Вычитывание_исходного_текста_модуля_из_отображения *)
PROCEDURE^ err* (n: INTEGER);
PROCEDURE^ err* (n: INTEGER); (* коды ошибок расшифрованы в ..\..\Dev\Rsrc\ru\Errors.tdc *)
PROCEDURE Init* (source: TextModels.Reader; logtext: TextModels.Model);
(** source - откуда читать, logtext - куда писать сообщения *)
PROCEDURE Init* (source: TextModels.Reader; logtext: TextModels.Model); (** Начать чтение исходного текста модуля из отображения *)
BEGIN
in := source;
DevMarkers.Unmark(in.Base());
......@@ -132,15 +146,15 @@ MODULE НяМ;
codeDir := OFdir; symDir := SFdir
END Init;
PROCEDURE Close*;
PROCEDURE Close*; (** Прекратить чтение исходного текста модуля из отображения *)
BEGIN
oldSymFile := NIL; inSym := NIL;
oldSymFile := NIL; ОбъектЧтенияФайлаСимволов := NIL;
symFile := NIL; outSym := NIL;
objFile := NIL; outObj := NIL;
in := NIL; lineReader := NIL
END Close;
PROCEDURE Get* (VAR ch: CHAR);
PROCEDURE Get* (VAR ch: CHAR); (** Прочитать букву исходного текста модуля из отображения in *)
BEGIN
REPEAT in.ReadChar(ch); INC(curpos) UNTIL ch # TextModels.viewcode;
END Get;
......@@ -157,6 +171,8 @@ MODULE НяМ;
RETURN lineNum
END LineOf;
(*** Разное *)
PROCEDURE LoWord (r: REAL): INTEGER;
VAR x: INTEGER;
BEGIN
......@@ -467,7 +483,7 @@ MODULE НяМ;
END
END Mark;
PROCEDURE err* (n: INTEGER);
PROCEDURE err* (n: INTEGER); (* коды ошибок расшифрованы в ..\..\Dev\Rsrc\ru\Errors.tdc *)
BEGIN
Mark(n, errpos)
END err;
......@@ -495,7 +511,7 @@ MODULE НяМ;
END InsertMarks;
(* fingerprinting *)
(*** Контрольная_сумма *)
PROCEDURE InitCrcTab;
(* CRC32, high bit first, pre & post inverted *)
......@@ -516,7 +532,7 @@ MODULE НяМ;
END
END InitCrcTab;
PROCEDURE FPrint* (VAR fp: INTEGER; val: INTEGER);
PROCEDURE FPrint* (VAR fp: INTEGER; val: INTEGER); (* Вычисляет контрольную сумму числа *)
VAR c: INTEGER;
BEGIN
(*
......@@ -542,7 +558,7 @@ MODULE НяМ;
FPrint(fp, LoWord(lr)); FPrint(fp, HiWord(lr))
END FPrintLReal;
PROCEDURE ChkSum (VAR fp: INTEGER; val: INTEGER); (* symbolfile checksum *)
PROCEDURE ChkSum (VAR fp: INTEGER; val: INTEGER); (* Контрольная сумма символьного файла *)
BEGIN
(* same as FPrint, 8 bit only *)
fp := ORD(BITS(fp * 256) / BITS(crc32tab[ORD(BITS(fp DIV 1000000H) / BITS(val)) MOD 256]))
......@@ -550,7 +566,7 @@ MODULE НяМ;
(* compact format *)
(*** Компактный_формат_ввода_вывода *)
PROCEDURE WriteLInt (w: Files.Writer; i: INTEGER);
BEGIN
......@@ -627,42 +643,44 @@ MODULE НяМ;
END ReadLReal;
(* read symbol file *)
(*** Чтение_простых_типов_из_символьного_файла см. также Запись_простых_типов_в_символьный_файл *)
PROCEDURE SymRCh* (VAR ch: SHORTCHAR);
PROCEDURE SymRCh* (VAR ch: SHORTCHAR); (* Прочитать SHORTCHAR из тек. символьного файла *)
VAR b: BYTE;
BEGIN
inSym.ReadByte(b); ch := SHORT(CHR(b));
ОбъектЧтенияФайлаСимволов.ReadByte(b); ch := SHORT(CHR(b));
ChkSum(checksum, b)
END SymRCh;
PROCEDURE SymRInt* (): INTEGER;
PROCEDURE SymRInt* (): INTEGER; (* Прочитать INTEGER из тек. символьного файла *)
VAR k: INTEGER;
BEGIN
ReadNum(inSym, k); RETURN k
ReadNum(ОбъектЧтенияФайлаСимволов, k); RETURN k
END SymRInt;
PROCEDURE SymRSet* (VAR s: SET);
PROCEDURE SymRSet* (VAR s: SET); (* Прочитать множество SET из тек. символьного файла *)
BEGIN
ReadNumSet(inSym, s)
ReadNumSet(ОбъектЧтенияФайлаСимволов, s)
END SymRSet;
PROCEDURE SymRReal* (VAR r: SHORTREAL);
PROCEDURE SymRReal* (VAR r: SHORTREAL); (* Прочитать SHORTREAL из тек. символьного файла *)
BEGIN
ReadReal(inSym, r)
ReadReal(ОбъектЧтенияФайлаСимволов, r)
END SymRReal;
PROCEDURE SymRLReal* (VAR lr: REAL);
PROCEDURE SymRLReal* (VAR lr: REAL); (* Прочитать REAL из тек. символьного файла *)
BEGIN
ReadLReal(inSym, lr)
ReadLReal(ОбъектЧтенияФайлаСимволов, lr)
END SymRLReal;
PROCEDURE eofSF* (): BOOLEAN;
PROCEDURE eofSF* (): BOOLEAN; (* Закончился ли тек. симв. файл? *)
BEGIN
RETURN inSym.eof
RETURN ОбъектЧтенияФайлаСимволов.eof
END eofSF;
PROCEDURE OldSym* (IN modName: ARRAY OF SHORTCHAR; VAR done: BOOLEAN);
(** Открывает и присваивает переменной oldSymFile.
Далее с ним работают ф-ии SymRCh,..., eofSF, ЗакрытьСуществующий... *)
PROCEDURE ОткрытьСуществующийСимвольныйФайл_OldSym* (IN modName: ARRAY OF SHORTCHAR; VAR done: BOOLEAN);
VAR tag, res: INTEGER; loc: Files.Locator; dir, name: Files.Name;
BEGIN
done := FALSE;
......@@ -671,29 +689,32 @@ MODULE НяМ;
ELSE
Kernel.Utf8ToString(modName, name, res); Kernel.SplitName(name, dir, name);
Kernel.MakeFileName(name, Kernel.symType);
(* Ищем файл в текущей директории символов... *)
loc := Files.dir.This(dir); loc := loc.This(symDir);
oldSymFile := Files.dir.Old(loc, name, Files.shared);
(* А если её нет, то в директории system *)
IF (oldSymFile = NIL) & (dir = "") THEN
loc := Files.dir.This(SYSdir); loc := loc.This(symDir);
oldSymFile := Files.dir.Old(loc, name, Files.shared)
END
END;
IF oldSymFile # NIL THEN
inSym := oldSymFile.NewReader(inSym);
IF inSym # NIL THEN
ReadLInt(inSym, tag);
ОбъектЧтенияФайлаСимволов := oldSymFile.NewReader(ОбъектЧтенияФайлаСимволов);
(* Проверим, что это действительно символьный файл *)
IF ОбъектЧтенияФайлаСимволов # NIL THEN
ReadLInt(ОбъектЧтенияФайлаСимволов, tag);
IF tag = SFtag THEN done := TRUE ELSE err(151) END
END
END
END OldSym;
END ОткрытьСуществующийСимвольныйФайл_OldSym;
PROCEDURE CloseOldSym*;
PROCEDURE ЗакрытьСуществующийСимвольныйФайл_CloseOldSym*;
BEGIN
IF oldSymFile # NIL THEN oldSymFile.Close; oldSymFile := NIL END
END CloseOldSym;
END ЗакрытьСуществующийСимвольныйФайл_CloseOldSym;
(* write symbol file *)
(*** Запись_простых_типов_в_символьный_файл см. также Чтение_простых_типов_из_символьного_файла *)
PROCEDURE SymWCh* (ch: SHORTCHAR);
BEGIN
......@@ -757,7 +778,7 @@ MODULE НяМ;
END DeleteNewSym;
(* write object file *)
(*** Запись_объектного_файла *)
PROCEDURE ObjW* (ch: SHORTCHAR);
BEGIN
......
......@@ -1608,7 +1608,7 @@ MODULE НяП;
END
END Block;
PROCEDURE Module*(VAR prog: НяФс.Node);
PROCEDURE Module*(VAR prog: НяФс.Node); (* Парсить директиву MODULE *)
VAR impName, aliasName: НяФс.Name;
procdec, statseq: НяФс.Node;
c: INTEGER; done: BOOLEAN;
......@@ -1629,6 +1629,7 @@ MODULE НяП;
CheckSym(rbrak)
END;
CheckSym(semicolon);
(** Читаем импорты и сразу их ищем и импортируем *)
IF sym = import THEN НяЛ.Get(sym);
LOOP
IF sym = ident THEN
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment