Автор Тема: Online компилятор Oberon-07/11.  (Прочитано 165265 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #345 : Январь 22, 2014, 04:49:44 pm »
MODULE test;
IMPORT JS;
VAR
M: ARRAY 10 OF INTEGER;
I : INTEGER;
J : INTEGER;
 
BEGIN
 
J := 500;
I := J + 999999999999999999999999999999999999999999999999999999;
M[I] := 5;
 JS.alert(M[I]);
END test.

Возможность компиляции такого кода, явно не соответствует рапорту. :)
Какому именно пункту репорта противоречит?
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #346 : Январь 22, 2014, 05:05:58 pm »
Неужели данная проверка сложнее, чем уже написанный компилятор, или это личное убеждение?

Проверку добавить не сложно. Так же как и кучу других хороших вещей. Проверка обяазна быть в хорошем современном языке (js - говно еще раз). Просто оно неприоритетное. Если кого-то сильно парит - можно всегда скачать исходниги и добавить.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #347 : Январь 26, 2014, 05:29:19 am »
В случае зацикливания модулей, ругается на переполнение стека (если не ошибаюсь, на память привожу)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #348 : Январь 26, 2014, 05:53:58 am »
Хотя возможно мне обновиться надо. Не исправлялась ли подобного рода ошибка в этом месяца: в случае если в процедуре указывалась секция VAR var: expMod.; (т.е. не до конца указывался тип переменной), то в качестве строки ошибки указывалась строка начала модуля (со словом MODULE)

Просто в онлайн компиляторе не смог воспроизвести, а в предыдущей локальной версии (где то начала января) воспроизводится. Если исправилась, то обновился бы

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #349 : Январь 26, 2014, 05:55:10 am »
Локально примерно на таком коде ошибка не правильно выдавалась
MODULE v;
 
TYPE
 t* = POINTER TO RECORD END;
 
BEGIN
 
END v.

MODULE test;
IMPORT JS, v;
 
TYPE
 
 s = POINTER TO RECORD END;

PROCEDURE k();
 
END k;
 
 PROCEDURE T* ();
 
 VAR
  k: s;
  t: v.;
 
 BEGIN
 
 END;
BEGIN
 
  T ();
    JS.alert("Hello, World!")
END test.


adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #350 : Январь 26, 2014, 05:57:11 am »
хотя нет, именно на этом коде локально ругается как и в онлайн компиляторе, значит что-то еще надо добавить, попробую разобраться

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #351 : Январь 26, 2014, 06:27:30 am »
Не знаю в чем дело, но попробовал скопировать проблемный модуль в новый файл, в нем ошибку выдавало правильно, может какие-нибудь скрытые символы не скопировались при этом. Пока не знаю, что еще можно проверить, если еще раз возникнет подобная ситуация, попробую доразбираться. Компилятор похоже не причём

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #352 : Январь 29, 2014, 12:05:35 am »
Если я правильно понял, то "локальный" компилятор, состоящий из нескольких файлов, собирается в "онлайн" компилятор, содержащий один файл. Чем это делается? Или как мне можно объединить полученные компилятором файлы в 1. Если нет инструмента, то хотя бы принцип раскажите.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #353 : Февраль 02, 2014, 05:20:32 pm »
Если я правильно понял, то "локальный" компилятор, состоящий из нескольких файлов, собирается в "онлайн" компилятор, содержащий один файл. Чем это делается? Или как мне можно объединить полученные компилятором файлы в 1. Если нет инструмента, то хотя бы принцип раскажите.

Это делает browser/linkjs.py. build.cmd строит страничку.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #354 : Февраль 07, 2014, 09:25:04 am »
Не знаю, разумно ли будет следущее предложение:

Можно ли параметр this в параметрах процедур вообще пропускать (естественно он должн идти последним, а в теле процедур, так и писать как this . Или это чего то порушит?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #355 : Февраль 07, 2014, 03:11:52 pm »
Можно ли параметр this в параметрах процедур вообще пропускать (естественно он должн идти последним, а в теле процедур, так и писать как this . Или это чего то порушит?

Можно пример - а то непонятно о чем речь.

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #356 : Февраль 08, 2014, 04:52:38 am »
Сейчас если написать например так:
PROCEDURE T ( this : Type );
BEGIN
   this.Property := 5;
END T;

на выходе вместо  this выдается this$

А хотелось бы чтобы в заголовке процедуры этого параметра не было вообще, а в теле так и остался this

Хотя понимаю, что в яваскрипт значение this меняется в зависимости от контекста, и не всегда это будет правильно скорее всего (хотя смотря какой код, для методов это вроде всегда ссылка на объект метода)

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #357 : Февраль 08, 2014, 05:02:50 am »
Или расскажу свою задачу, может есть еще решение (без JS.do ( "var = this" );

Есть внешний объект, который генерирует события, и ищет обработчики события в объекте по имени метода. Параметры метода жестко заданы. В методе мне надо получить/ свойство объекта

Можно конечно, использовать переменные модуля вместо свойства объекта, но если я правильно понимаю, будет одна такая переменная на каждый экземляр объекта, а мне нужно на каждый свою.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #358 : Февраль 08, 2014, 05:41:40 am »
Сейчас если написать например так:
PROCEDURE T ( this : Type );
BEGIN
   this.Property := 5;
END T;

на выходе вместо  this выдается this$

Так а ебероновские методы не подойдут?
TYPE
    Type = RECORD
        PROCEDURE T();
        Property: INTEGER
    END;

PROCEDURE Type.T();
BEGIN
    SELF.Property := 5; (* вот это странслируется в this.Property = 5 *)
END Type.T;

adva

  • Sr. Member
  • ****
  • Сообщений: 385
    • Просмотр профиля
Re: Online компилятор Oberon-07/11.
« Ответ #359 : Февраль 08, 2014, 06:51:17 am »
Спасибо, Не знаю, надо попробовать. Для этого какие-то опции компилятора нужны, или так можно (хотя мне скорее всего надо будет обновляться)?