Skip to content

Commit

Permalink
Уточнён синтаксис классических комментариев (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mazdaywik committed Feb 28, 2016
1 parent bf12816 commit 2fc4471
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 73 deletions.
9 changes: 8 additions & 1 deletion Documentation/Журнал/Changes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7844,4 +7844,11 @@ back-end’ом компилируется весь набор исходник
Задача «Удалить исходники Простого Рефала из Модульного Рефала» закрыта как выполненная.
Задача «Актуализировать компилятор Простого Рефала и back-end C++/SR» переименована
в «Актуализировать back-end C++/SR». Она будет закрыта, когда back-end станет совместимым с новым
рантаймом.
рантаймом.


[28.02.2016 - 15:13:21,58]
(Версия 0.2.981)
[TODO: Изменения в лексике и комментариях]
Поведение звёздочки изменено: теперь она обозначает комментарий, только когда находится в первой
позиции строки. В остальных случаях происходит синтаксическая ошибка.
2 changes: 1 addition & 1 deletion Documentation/Журнал/LIST.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
[TODO] RASL и интерпретатор
[TOTHINK] Упрощение структуры Lexer'а и Parser'а
[TOTHINK] Двухуровневая структура синтаксического анализатора
[TODO] Изменения в лексике и комментариях
[TODO] Блоки $INIT и $FINAL
[TOTHINK] Написание комплексных тестов для библиотеки
[TOTHINK] Грамотная реализация библиотеки
Expand All @@ -18,3 +17,4 @@
[TODO] Оптимизация совместного сопоставления с образцом
[TOTHINK] ВПВ: Opensource-лицензия
[TODO] Актуализировать back-end C++/SR
[TODO] Изменения в лексике и комментариях
119 changes: 62 additions & 57 deletions Documentation/Журнал/TODOs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -164,63 +164,6 @@
данных к новым синтаксическим конструкциям. Тогда же этот вопрос и будет решён.


====================================================================================================
[TODO] Изменения в лексике и комментариях
====================================================================================================

[TODO] 22.09.2008 - 23:27:35,87

Можно расширить лексику следующим образом: разрешить имена с маленькой буквы (будут проблемы толь-
ко если модуль имеет имя s, t или e -- в конце модуля ведь точка, и при импорте функций тоже). Можно
с большой буквы оставить имена только модулей или каких-либо других имён, разрешаемых точкой. Также
полезно избавиться от анахронизма -- комментариев, начинающихся со звёздочки. И так язык прекрасно
поддерживает комментарии C++ '//'. А звёздочку можно использовать для передачи функции по ссылке --
вместо амперсенда.
----------------------------------------------------------------------------------------------------
[TODO] 01.02.2009 - 21:42:25,09

Опять же, изменения в лексике не являются приоритетным для версии 0.2.
Изменения, связанные с именами с маленькой буквы я считаю сомнительными, а исключение комментари-
ев, начинающихся со звёздочки, я считаю вполне разумным.
----------------------------------------------------------------------------------------------------
[TODO] 01.05.2010 - 19:30:19,45

(Ревизия 01.05.2010) Не требуется для выпуска версии 0.2.
Мне хочется, чтобы версия 0.2 была совместима с синтаксисом языка версии 0.1, т.е. чтобы можно
было откомпилировать исходники выпуска 0.1 выпущенной версией 0.2. Поэтому комментарии со звёздоч-
кой я убирать пока не буду, а только назову их deprecated.
Комментарии со звёздочкой удалю при первой же переработке синтаксиса языка. А имена со строчной
буквы не нужны, т.к. никаких принципиально новых возможностей дать пока не могут.
----------------------------------------------------------------------------------------------------
[TODO] 25.07.2010 - 12:33:59,02

(Ревизия 25.07.2010) Не требуется для выпуска версии 0.2.
Вообще, мне бы хотелось, чтобы компилятор версии N мог бы компилировать исходный код версии N-1,
изменение лексики сделало бы это невозможным.
----------------------------------------------------------------------------------------------------
[RENAME] 07.09.2010 - 23:30:08,46

Old name is "[TODO] Продумать изменения в лексике и комментариях"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
----------------------------------------------------------------------------------------------------
[TOTHINK] 07.09.2010 - 23:30:08,46

Удалено слово "продумать" ("обдумать") из заголовка, сменён тег с TODO на TOTHINK. (Переименова-
ние было проведено при первой возможности — сразу после того, как был введён тег RENAME.)
----------------------------------------------------------------------------------------------------
[TODO] 18.12.2015 - 16:11:11,60

(Ревизия 18.12.2015)
Менять указатель функции с & на * я считаю не особо нужным, а в остальном комментарий,
начинающийся со * проблем не создаёт. Единственное, что традиционно в Рефале комментарием
считается строка, у которой звёздочка находится в самой первой колонке, но в текущей версии
Модульного Рефала перед звёздочкой может находиться произвольное число пробельных символов.
Это несоответствие классическому подходу всё-таки стоит изменить на нормальное.
Параллельно с этим стоит сделать рефакторинг и оптимизацию лексического анализатора: при полной
пересборке на лексический анализ уходит примерно 20 % времени выполнения программы, на каждую
лексему приходится примерно 57 шагов рефал-машины.


====================================================================================================
[TODO] Блоки $INIT и $FINAL
====================================================================================================
Expand Down Expand Up @@ -1401,3 +1344,65 @@ t-переменная. Группируются по атомарности, в
рантаймом.


====================================================================================================
[TODO] Изменения в лексике и комментариях
====================================================================================================

[TODO] 22.09.2008 - 23:27:35,87

Можно расширить лексику следующим образом: разрешить имена с маленькой буквы (будут проблемы толь-
ко если модуль имеет имя s, t или e -- в конце модуля ведь точка, и при импорте функций тоже). Можно
с большой буквы оставить имена только модулей или каких-либо других имён, разрешаемых точкой. Также
полезно избавиться от анахронизма -- комментариев, начинающихся со звёздочки. И так язык прекрасно
поддерживает комментарии C++ '//'. А звёздочку можно использовать для передачи функции по ссылке --
вместо амперсенда.
----------------------------------------------------------------------------------------------------
[TODO] 01.02.2009 - 21:42:25,09

Опять же, изменения в лексике не являются приоритетным для версии 0.2.
Изменения, связанные с именами с маленькой буквы я считаю сомнительными, а исключение комментари-
ев, начинающихся со звёздочки, я считаю вполне разумным.
----------------------------------------------------------------------------------------------------
[TODO] 01.05.2010 - 19:30:19,45

(Ревизия 01.05.2010) Не требуется для выпуска версии 0.2.
Мне хочется, чтобы версия 0.2 была совместима с синтаксисом языка версии 0.1, т.е. чтобы можно
было откомпилировать исходники выпуска 0.1 выпущенной версией 0.2. Поэтому комментарии со звёздоч-
кой я убирать пока не буду, а только назову их deprecated.
Комментарии со звёздочкой удалю при первой же переработке синтаксиса языка. А имена со строчной
буквы не нужны, т.к. никаких принципиально новых возможностей дать пока не могут.
----------------------------------------------------------------------------------------------------
[TODO] 25.07.2010 - 12:33:59,02

(Ревизия 25.07.2010) Не требуется для выпуска версии 0.2.
Вообще, мне бы хотелось, чтобы компилятор версии N мог бы компилировать исходный код версии N-1,
изменение лексики сделало бы это невозможным.
----------------------------------------------------------------------------------------------------
[RENAME] 07.09.2010 - 23:30:08,46

Old name is "[TODO] Продумать изменения в лексике и комментариях"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
----------------------------------------------------------------------------------------------------
[TOTHINK] 07.09.2010 - 23:30:08,46

Удалено слово "продумать" ("обдумать") из заголовка, сменён тег с TODO на TOTHINK. (Переименова-
ние было проведено при первой возможности — сразу после того, как был введён тег RENAME.)
----------------------------------------------------------------------------------------------------
[TODO] 18.12.2015 - 16:11:11,60

(Ревизия 18.12.2015)
Менять указатель функции с & на * я считаю не особо нужным, а в остальном комментарий,
начинающийся со * проблем не создаёт. Единственное, что традиционно в Рефале комментарием
считается строка, у которой звёздочка находится в самой первой колонке, но в текущей версии
Модульного Рефала перед звёздочкой может находиться произвольное число пробельных символов.
Это несоответствие классическому подходу всё-таки стоит изменить на нормальное.
Параллельно с этим стоит сделать рефакторинг и оптимизацию лексического анализатора: при полной
пересборке на лексический анализ уходит примерно 20 % времени выполнения программы, на каждую
лексему приходится примерно 57 шагов рефал-машины.
----------------------------------------------------------------------------------------------------
[TODO] 28.02.2016 - 15:13:21,58

Поведение звёздочки изменено: теперь она обозначает комментарий, только когда находится в первой
позиции строки. В остальных случаях происходит синтаксическая ошибка.


17 changes: 3 additions & 14 deletions Sources/Compiler/FE-MRefal/MLexer.mref
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ DoUnBlank
SwDoUnBlank {
// Просмотр следующей строки на предмет наличия Рефал-комментария
t.SymStream CrLf =
<UnBlankNewLine t.SymStream>;
<SwRefalComment <MSymStream::NextChar t.SymStream>>;

// Вероятно, далее следует C- или C++-комментарий
t.SymStream '/' =
Expand Down Expand Up @@ -149,23 +149,12 @@ SwDoEatC-Comment {
<DoEatC-Comment t.SymStream s.Other>;
}

UnBlankNewLine
t.SymStream =
<DeleteStartSpaces
<MSymStream::ExtractsFromSet t.SymStream (' \t\r')>
>;

DeleteStartSpaces
t.SymStream e.StartSpaces =
<SwRefalComment <MSymStream::NextChar t.SymStream>>;

SwRefalComment {
t.SymStream '*' =
<DoEatCPP-Refal-Comment <MSymStream::NextChar t.SymStream>>;

/* В новой строке после нескольких пробелов не обязательно должен
находиться Рефал-комментарий, там могут быть и другие комментарии,
и другие переводы строки */
/* В новой строке находиться Рефал-комментарий, там могут быть
и другие комментарии, переводы строки и пробельные символы */
t.SymStream s.Other =
<UnBlank-Chain
<MSymStream::ReturnChar t.SymStream s.Other>
Expand Down

0 comments on commit 2fc4471

Please sign in to comment.