User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 30 из 36

Тема: Создание кросскомпилятора языка Оберон для Z80

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    01	TYPE
    01.1	    TEMPLATE<CLASS XXX>
    02	    ListStdItem = POINTER TO RECORD
    03	        value: XXX;
    04	    END;
    
    Теперь у нас есть все возможные типы ListStdItem<LONGINT>, ListStdItem<DOUBLE>, ListStdItem<STRING>, ListStdItem<ListStdItem<STRING>> и т.п.
    
    05
    05.1	    TEMPLATE<CLASS XXX>
    06	    StdList = OBJECT
    07	        VAR
    08	            list: List;
    09	             
    10	        PROCEDURE &New(options: SET);
    11	        BEGIN
    12	            NEW(list, Compare, options)
    13	        END New;
    14	         
    15	        PROCEDURE Compare(first, second: ANY): LONGINT;
    16	        VAR
    17	            nFirst, nSecond: XXX;
    18	        BEGIN
    19	            nFirst := first(ListStdItem<XXX>).value;
    20	            nSecond := second(ListStdItem<XXX>).value;
    21	            IF nFirst < nSecond THEN
    22	                RETURN -1
    23	            ELSIF nFirst > nSecond THEN
    24	                RETURN 1
    25	            ELSE
    26	                RETURN 0
    27	            END
    28	        END Compare;
    29	                 
    30	        PROCEDURE Add(x: XXX);
    31	        VAR
    32	            item: ListStdItem<XXX>;
    33	        BEGIN
    34	            NEW(item);
    35	            item.value := x;
    36	            list.Add(item)
    37	        END Add;
    38	         
    39	        PROCEDURE Insert(pos: LONGINT; x: XXX);
    40	        VAR
    41	            item: ListStdItem<XXX>;
    42	        BEGIN
    43	            NEW(item);
    44	            item.value := x;
    45	            list.Insert(pos, item)
    46	        END Insert;
    47	         
    48	        PROCEDURE Remove(i: LONGINT);
    49	        BEGIN
    50	            list.Remove(i)
    51	        END Remove;
    52	         
    53	        PROCEDURE IndexOf(x: XXX): LONGINT;
    54	        VAR
    55	            item: ListStdItem<XXX>;
    56	        BEGIN
    57	            NEW(item);
    58	            item.value := x;
    59	            RETURN list.IndexOf(item)
    60	        END IndexOf;
    61	         
    62	        PROCEDURE GetCount(): LONGINT;
    63	        BEGIN
    64	            RETURN list.GetCount()
    65	        END GetCount;
    66	         
    67	        PROCEDURE GetItem(i: LONGINT): XXX;
    68	        VAR
    69	            item: ANY;
    70	        BEGIN
    71	            item := list.GetItem(i);
    72	            RETURN item(ListStdItem<XXX>).value
    73	        END GetItem;
    74	             
    75	    END LongintList;
    
    Теперь у нас есть все возможные типы StdList<LONGINT>, StdList<DOUBLE>, StdList<STRING>, StdList<StdList<STRING>> и т.п.
    Последний раз редактировалось vinxru; 15.03.2012 в 13:13.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking

    У меня такой вопрос:

    1. В конце процедуры, например, "add" есть запись "END Add;", поймёт ли он просто "END;" ?

    2. Красным выделю вариант. Меня интересует поймёт ли компилятор ?

    Код:
    	        PROCEDURE Compare(first, second: ANY): LONGINT;
    	        VAR
    	            nFirst, nSecond: XXX;
    	        BEGIN
    	            nFirst := first(ListStdItem<XXX>).value;
    	            nSecond := second(ListStdItem<XXX>).value;
    	            IF nFirst < nSecond THEN
    	                RETURN -1
    	            ELSIF nFirst > nSecond THEN BEGIN
    	                RETURN 1;
    	            END ELSE BEGIN
    	                RETURN 0;
    	            END;
    	        END Compare;
    3. Как компилятор относится к регистру в тексте ? Могу ли я объявить процедуру Большими символами, а вызывать её маленькими ?
    AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.

  4. #3
    ZEK
    Гость

    По умолчанию

    Цитата Сообщение от Robus Посмотреть сообщение
    поймёт ли он просто "END;" ?
    Нет, имя обязательно

    Цитата Сообщение от Robus Посмотреть сообщение
    Красным выделю вариант. Меня интересует поймёт ли компилятор
    Нет, скобки begin-end больше нет

    Цитата Сообщение от Robus Посмотреть сообщение
    Могу ли я объявить процедуру Большими символами, а вызывать её маленькими ?
    Нет , регистрочувствителен

  5. #4

    Регистрация
    11.03.2012
    Адрес
    г. Саратов
    Сообщений
    1
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть визуальный разработчик для микроконтроллеров Деконт 128 (внутри Z80). Компилирует визуальная схема -> C -> ASM -> машинный код (не особо оптимальный естественно)

  6. #5

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Нет. И это сделано затем, чтобы было легко различимо, где конец цикла/ифа, а где более глобальный конец процедуры. Меня в Си бесит, что одна и та же скобка } может закрывать всё. Володя Мутель даже придумал в таких случаях её удваивать, но это хак, согласитесь.
    "Проблема" решается соблюдением табуляции и отказом от макаронных функций на несколько экранов.

  7. #6

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,780
    Спасибо Благодарностей отдано 
    2,750
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Почему это "контроль качества кода провести не легко"? Дизасм никто не отменял.

    Цитата Сообщение от Vitamin Посмотреть сообщение
    "Проблема" решается соблюдением табуляции и отказом от макаронных функций на несколько экранов.
    Как показала многолетняя практика, табуляция действительно сильно помогает, но всех ею заставить пользоваться не получится. Поэтому часто лучше действительно вшить такую полезную вещь в язык. Оберон часто вынуждает подставить имя там, где другие языки обходятся неявным "self" или "this", что заставляет программиста осмыслить глубже то, что он собирается сказать. Подчёркивает суть. В ветке http://zx.pk.ru/showthread.php?t=18336 опять же обсуждалась технология использования в Си анонимных "фреймов", я показал как в Обероне/Паскале сделать их поименованными, а программу – более наглядной.

    Поэтому END – это анонимное окончание, а END Proc – поименованное, названное или, если хотите, обозначенное. Да, и в Си можно писать
    Код:
    }/*Proc*/
    или
    Код:
    }/*if*/
    но заставить ВСЕХ так писать всё равно не получится.

  8. #7

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Как показала многолетняя практика, табуляция действительно сильно помогает, но всех ею заставить пользоваться не получится.
    Есть такой показатель, как сопровождаемость кода. И человек, пишущий в команде несопровождаемый код, обычно долго в этой команде не проживает. Либо исправляется, либо удаляется. Ибо написать софт- это меньше чем полдела. А вот поддерживать его- это самое трудное.

  9. #8

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,780
    Спасибо Благодарностей отдано 
    2,750
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Справедливо, я согласен.

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Создание форума
    от CityAceE в разделе Форум
    Ответов: 43
    Последнее: 10.07.2016, 22:23
  2. Ответов: 172
    Последнее: 10.12.2012, 18:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •