Skip to content

Commit

Permalink
Из документации удалены упоминания нативных вставок (#36)
Browse files Browse the repository at this point in the history
Начиная с этого коммита, нативные вставки — недокументированное расширение
компилятора.
  • Loading branch information
Mazdaywik committed Apr 1, 2019
1 parent bde37a1 commit e101eb5
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 177 deletions.
8 changes: 2 additions & 6 deletions docs/2-syntax.md
Original file line number Diff line number Diff line change
Expand Up @@ -1033,8 +1033,8 @@ N — число двоичных разрядов типа `unsigned long` и
* `'B'` — скобочный терм. Подтип всегда `'0'`.

Работа функции зависит от установленной локали (которая по умолчанию вроде
`"C"`), если локаль изменена (конфигурацией операционной системы или нативной
вставкой), то функция будет работать иначе. Лексический анализатор полагается
`"C"`), если локаль изменена (конфигурацией операционной системы или внешней функцией
на Си), то функция будет работать иначе. Лексический анализатор полагается
на эту функцию.

**Совместимость с Рефалом-5.** В Рефале-5 тип `'W'` используется для слов, подтип
Expand Down Expand Up @@ -1191,7 +1191,6 @@ N — число двоичных разрядов типа `unsigned long` и
псевдокомментариями — вопрос личных предпочтений.
* Если косвенный вызов функции осуществляется из другого файла, вызываемая
функция должна быть определена как entry (подробнее — через один подраздел).
* Нельзя использовать нативные вставки.
* Если программа читает аргументы командной строки, они не должны начинаться
со знака `-`, поскольку они игнорируются `refgo`.

Expand Down Expand Up @@ -1236,9 +1235,6 @@ N — число двоичных разрядов типа `unsigned long` и
* По субъективному мнению автора программировать на общем подмножестве
интереснее, чем на чистом Рефале-05.

Очевидное исключение, когда не нужно писать на подмножестве — написание модулей
с нативными вставками.

### Куда поместить `$ENUM` и `$EENUM`: псевдокомментарии

Рефал-5 ключевые слова `$ENUM` и `$EENUM` не понимает. Функции, у которых между
Expand Down
16 changes: 7 additions & 9 deletions docs/3-install-and-usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,8 +283,8 @@ _библиотеку поддержки времени выполнения_ (r
Рассмотрим каждую из строчек подробнее:

* `Total program time` — общее время выполнения, от запуска до завершения.
* `Builtin time` — время выполнения функций, описанных при помощи нативных
вставок. Это прежде всего встроенные функции.
* `Builtin time` — время выполнения функций, написанных вручную на Си.
Это прежде всего встроенные функции.
* `(Total refal time)` — суммарное время выполнения функций, написанных
на Рефале. В сумме с `Builtin time` должно давать 100 %.
* `Linear pattern time` — «линейное» время сопоставления с образцом. Это
Expand Down Expand Up @@ -347,7 +347,7 @@ _библиотеку поддержки времени выполнения_ (r
Макрос влияет на дамп, выводимый как при ошибке, так и при установленном
макросе `R05_SHOW_DEBUG`.

Макрос предназначен для отладки рантайма и нативных функций, но может быть
Макрос предназначен для отладки рантайма и функций, написанных на Си, но может быть
полезен для программ, которые почему-то требуют много памяти и вылетают от её
недостатка.

Expand Down Expand Up @@ -376,18 +376,16 @@ _библиотеку поддержки времени выполнения_ (r
* Сгенерированные функции, как правило, очень длинные, их читать и понимать
сложнее.

Однако, отладчик **полезен** при отладке нативных функций (которые сами пишутся
на Си) или рантайма. В частности, автор использовал GDB для просмотра
Однако, отладчик **полезен** при отладке функций, которые сами пишутся
на Си, или рантайма. В частности, автор использовал GDB для просмотра
точки падения и трассировки стека при ошибках доступа к памяти (SEGFAULT’ах).

### Отладчики Рефала-5 (`reftr`) и Рефала-5λ

Если программа написана на общем подмножестве, то её можно собрать другим
компилятором Рефала-5 и использовать средства отладки другой реализации.

Метод неприменим, если программа не написана на общем подмножестве, в частности
использует нативные вставки. В таком случае модули с нативными вставками
придётся подменять модулями-заглушками и отлаживать с ними.
Метод неприменим, если программа не написана на общем подмножестве.

### Отладка на уровне исходного кода — отладочная печать

Expand Down Expand Up @@ -629,7 +627,7 @@ e-переменную на верхнем уровне, допустить о

* ошибка невозможности отождествления — код `201`,
* ошибка нехватки памяти — код `202`,
* ошибка во встроенной (нативной) функции — код `203`.
* ошибка во встроенной функции или внешней функции, написанной на Си, — код `203`.


[PZ]: http://www.botik.ru/pub/local/scp/refal5/
Expand Down
34 changes: 5 additions & 29 deletions docs/4-libraryex-components.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
----------------------

В отличие от библиотеки встроенных функций `Library`, библиотека `LibraryEx`
написана на Рефале без нативных вставок, а значит, принципиально новых
написана на Рефале, а значит, принципиально новых
возможностей не несёт. Всё, что в ней есть — это надстройки над встроенными
функциями и другие функции, облегчающие программирование на Рефале.

Expand Down Expand Up @@ -337,13 +337,11 @@
t.TreeItem ::=
(Extern e.Name)
| (Function s.Scope (e.Name) e.Body)
| (Native e.Native)

e.Name ::= s.CHAR+
s.Scope ::= Entry | Local

e.Body ::= Sentences t.Sentence* | Native e.Native
e.Native ::= (e.SourceName s.Line) (s.CHAR*)*
e.Body ::= Sentences t.Sentence*
s.Line ::= s.NUMBER
e.SourceName ::= s.CHAR+

Expand All @@ -368,7 +366,6 @@
<Entry> == s.CHAR* -- '$ENTRY'
<Local> == s.CHAR* -- пусто
<Sentences t.Sentence*> == s.CHAR*
<Native e.Native> == s.CHAR*

<Symbol s.Type e.Info> == s.CHAR*
<Char s.CHAR> == s.CHAR*
Expand Down Expand Up @@ -399,9 +396,6 @@

<s.Scope> == s.CHAR*

Нативная вставка `e.Native` содержит номер строки и имя исходного файла для
того, чтобы при генерации кода можно было добавить директиву `#line`.

Образец и результат описываются одинаковым синтаксическим деревом, разница
только в том, что в образце не может быть `CallBrackets` (что гарантирует
парсер).
Expand Down Expand Up @@ -484,14 +478,6 @@
функция записывает исходный текст в файл (используя `SaveFile`, т.е. файл № 39),
вторая возвращает сгенерированный текст как последовательность строк.

Вокруг каждой нативной вставки добавляются директивы `#line`, сообщающие
компилятору Си позицию последующего кода. Координаты (имя файла и номер строки)
для первой директивы извлекаются из синтаксического дерева. Координаты для
второй директивы зависят от функции. Функция `R05-Generate-ToFile` указывает
имя файла, равное `e.OutputName` и номер строки в сгенерированном коде.
Функция `R05-Generate-ToLines` сообщает номер строки в сгенерированном коде,
но в качестве имени файла указывает `"<user output>"`.


Лексический анализ Рефала-05 — компонент `R05-Lexer`
----------------------------------------------------
Expand All @@ -516,12 +502,10 @@
указанную строку.

Функция `R05-LexScan-File` читает файл при помощи `LoadFile`, а значит,
использует файл № 39. Позиции токенов соответствуют актуальным позициям в файле,
для токена `TkNative` имя файла соответствует имени в аргументе.
использует файл № 39. Позиции токенов соответствуют актуальным позициям в файле.

Функция `R05-LexScan-String` устанавливает позиции токенов такими, какими они
были бы, если бы текст был сохранён в файле. В качестве имени файла для
`TkNative` используется имя `'<user input>'`.
были бы, если бы текст был сохранён в файле.

Позиция записывается как пара чисел — номер строки и номер колонки. Табуляция
считается за одну колонку.
Expand All @@ -540,7 +524,6 @@
| TkError e.Message
| TkExtern
| TkName e.Name
| TkNative (e.SourceName s.LineNo) (s.CHAR*)*
| TkNumber s.NUMBER
| TkOpen s.Bracket
| TkOpenBlock
Expand Down Expand Up @@ -584,14 +567,8 @@
* целое число — `TkNumber`, атрибут — его значение как число,
* литера — `TkChar`, атрибут — литера,
* переменная — `TkVariable`, атрибут — тип и индекс переменной,
* нативная вставка — `TkNative`, атрибут — её координаты (имя файла и номер
строки) и последовательность строк как скобочных термов (см. функции
`R05-LexScan-File` и `R05-LexScan-String` выше),
* служебные токены `TkEOF`, `TkError`, `TkUnexpected`.

Функция `TkNative` при вызове со своим атрибутом форматирует нативную вставку
как есть, предваряя её однострочным комментарием с исходными координатами.

`TkEOF` атрибута не имеет, возвращается лексером при достижении конца ввода
(конца файла для `R05-LexScan-File` или конца строки `R05-LexScan-String`).
Вызов `TkEOF` порождает комментарий `/* end of file */`.
Expand All @@ -618,8 +595,7 @@

Функция возвращает человекочитаемое представление токена, которое можно
использовать, например, в сообщениях об ошибке. В текущей реализации она
вызывает сам токен, как функцию, за исключением `TkNative` и `TkUnexpected`.
В первом случае она не распечатывает содержимое нативной вставки, во втором —
вызывает сам токен, как функцию, за исключением `TkUnexpected` — она
форматирует его как сообщение об ошибке.

### Функция `R05-LexDump`
Expand Down
Loading

0 comments on commit e101eb5

Please sign in to comment.