Страница 17 из 17

Re: дневник Яос

Добавлено: 29.08.20 11:44
БудДен
И последние 6 страниц: https://gitlab.com/budden/jaos/-/commit ... 380067bc80

Re: дневник Яос

Добавлено: 30.08.20 15:11
БудДен
Заблудился в лесу деревьев разбора. Начал рисовать схему на бумажке, но и в ней запутался. Очевидно, назрела доработка модуля отладочной печати...

Re: дневник Яос

Добавлено: 03.09.20 01:22
БудДен
Уже и в отладочной печати почти запутался, но вроде выпутываюсь. Завтра посмотрим...

Re: дневник Яос

Добавлено: 04.09.20 23:37
БудДен
Отладочную печать осилил, теперь можно задавать способ печати любых записей, а нужно это для удобной печати синтаксических деревьев - без этого я в них разобраться не могу.

Записал видео с описанием проделанной за 2 месяца работы:

https://youtu.be/CkDxtdxPx5g

Re: дневник Яос

Добавлено: 06.09.20 01:39
БудДен
Вернулся к движку перевода. С помощью отладочной печати быстро исправил ошибку, которую до этого не мог осилить. Теперь буду думать, надо ли выделить перевод в отдельный шаг обработки, или и так сойдёт.

Re: дневник Яос

Добавлено: 07.09.20 13:40
БудДен
На выходных выделил перевод в отдельный шаг обработки дерева разбора и он вроде бы работает. Теперь хочу попробовать провязать перевод прямо к входным лексемам. Это рискованно и может не получиться, но если получится - будет очень классно и не придётся переделывать всю печать дерева в виде исходника.

Re: дневник Яос

Добавлено: 09.09.20 23:35
БудДен
Собрал систему компилятором Лис, который мало отличается от компилятора Fox, но всё же.
Система запускается и компилятор Лис в ней опять же работает. Дальше пока не смотрел.
Если всё будет ок, заменю компилятор Fox на компилятор Лис и продолжу копать перевод.

До успеха с переводом пока непонятное расстояние.

Re: дневник Яос

Добавлено: 13.09.20 01:26
БудДен
Сделал тестовый режим для того, чтобы проверять, не упущен ли где-то перевод. Он действует дуболомно: если перевод в таблицах не нашёлся, то переводит "тилорей", см. https://www.linux.org.ru/forum/talks/14525807

Можно поржать:

Код: Выделить всё

    (* simple case can be utilized when endString does not contain first character, which is the case for our string convention *)
    проц ЦонсумеСтрингУнтил(конст ендСтринг: ряд из литера8; усеЦонтрол: булево);
    перем есцапеПос: цел32; ецш: литера8; и: цел32; стартПоситион: Стреамс.Поситион;
    конст
      Цонтрол = '\';
      Делимитер = '"';

        проц Аппенд(цш :литера8);
        тело
          если цш = 370 то
            ЕррорС("Unexpected end of text in string"); еррор := правда;
          иначе
            стрингЮритер.Цшар(цш)
          кн;
        кн Аппенд;

    тело
      (* traverse *)
      есцапеПос := 0; ецш := ендСтринг[0]; стартПоситион := поситион.старт;
      ГетНехтЦшарацтер;
      цикл_до
        если цш = ецш то
          ИНЦ(есцапеПос); ецш := ендСтринг[есцапеПос];
          ГетНехтЦшарацтер;
        аесли усеЦонтрол и (цш = Цонтрол) то
          ГетНехтЦшарацтер;
          если (цш = Цонтрол) или (цш = Делимитер) то
            Аппенд(цш)
          аесли цш = 'n' то
            Аппенд(ЦР); Аппенд(ЛФ);
          аесли цш = 't' то
            Аппенд(ТАБ)
          иначе
            ЕррорС("Unknown control sequence")
          кн;
          ГетНехтЦшарацтер
        аесли есцапеПос = 0 то (* frequent case *)
          Аппенд(цш); ГетНехтЦшарацтер;
        иначе
          (* account for "forgotten" characters *)
          цикл_для и := 0 до есцапеПос-1 делай
            Аппенд(ендСтринг[и]);
          кн;
          (* restart *)
          ецш := ендСтринг[0]; есцапеПос := 0;
        кн;
      кн_цикла_до_если (цш = ЕОТ) или (ецш = 370) или еррор;
      если цш = ЕОТ то поситион.старт := стартПоситион; ЕррорС("Unexpected end of text in string") кн;
    кн ЦонсумеСтрингУнтил;
https://gitlab.com/budden/jaos/-/commit ... a691097b05

А в целом уже пора подумать о том, как же переводить. Вероятно, нужно сначала читать файл, генерировать
заготовку переводов (т.е. писать, какие в нём в принципе имена подлежат переводу). Затем пытаться
их перевести из какого-то пополняемого словаря. Допустим, i можно всегда переводить как "ии", или вообще не переводить:
просто "и" занято под ключевое слово., логическое "и", а j - как "j". "Error" можно всегда переводить как "Ошибка" и т.п.

Такой простой словарь наверняка покроет большую долю случаев.
И уже то, что он не осилит, то надо вручную переводить.

Re: дневник Яос

Добавлено: 14.09.20 23:51
БудДен
Потихоньку продвигаюсь в переводе атрибутов (UNTRACED и т.п). Один перевёл. Но зато на одном модуле теперь стала компиляция падать, причём вроде место было про другое.

Поскольку меня угораздило сделать одно изменение, которое утащили из ЯОС в A2, и с ним возникли проблемы у них, мне теперь придётся и на это время тратить. Однако разработчики A2 хорошо помогают, придётся поработать на них. Вероятно, где-то неделю потрачу (календарную).

Re: дневник Яос

Добавлено: 18.09.20 16:09
БудДен
Ещё немного продвинулся с движком перевода.