Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> язык HQ9+ и его дальнейшее развитие, давайте его дальше развивать 
:(
    Опции темы
Zloxa
Дата 8.12.2009, 18:27 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




мой небольшой вклад в ваше дело.
реализация интерпретатора на SQL
Код

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
Connected as common
 
var programm varchar2;
exec :programm := 'HQ9+';
 
PL/SQL procedure successfully completed
programm
---------
HQ9+
select
 sum(decode(cmd,'+',1,0)) over (order by s.rn) some_counter
 ,coalesce(decode(cmd,'H','Hello World')
           ,decode(cmd,'Q', code)
           ,bob
           ,decode(cmd,'+',null,1/0)
          )
   output
from (
  select
    level rn
    ,substr(:programm,level,1) cmd
    ,:programm code
  from dual
  connect by substr(:programm,level,1) is not null
 ) s
left join (select level rn,100 - level || ' Bottles of Beer on the Wall' bob from dual connect by level < 100) b
       on cmd = '9'
order by s.rn, b.rn;
 
SOME_COUNTER OUTPUT
------------ --------------------------------------------------------------------------------
           0 Hello World
           0 HQ9+
           0 99 Bottles of Beer on the Wall
           0 98 Bottles of Beer on the Wall
           0 97 Bottles of Beer on the Wall
.
.
.
           0 4 Bottles of Beer on the Wall
           0 3 Bottles of Beer on the Wall
           0 2 Bottles of Beer on the Wall
           0 1 Bottles of Beer on the Wall
           1 
 
102 rows selected
programm
---------
HQ9+



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
UniBomb
Дата 6.9.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




Ха-ха, вы думали я забросил это дело? Нет! Я всего-лишь немного пересмотрел систему ценностей и решил применить несколько иной подход.

В общем как бы то ни было, вот вам исходник:

Код

lexx = 'h'
counter = [0]
index = 0

loop do
    print "> "
    tokens = gets.chomp
    break if tokens == ''
    
    lex = tokens.split
    
    for lexx in lex do
    
        case lexx
            when "h"
                puts 'Hello world!'
            when "q"
                puts tokens
            when "9"
                101.times do |i|
                    if i < 100 then
                        puts "#{100-i} bottles of beer"
                        puts "you take one down, pass it around"
                    else
                        puts "no more bottles of beer on the wall."
                    end
                end
            when "+"
                counter[index] += 1
            when "-"
                counter[index] -= 1
            when "d"
                index -= 1
                if index < 0 then
                    inde = 0
                    puts "Error: out of range index"
                end
            when "i"
                index += 1
                if counter.length == index then
                    counter << 0
                end
            when "r"
                puts counter[index]
            else
                puts "Error: Unknown token \'#{lexx} \'"
        end
    
    end
end


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


Код

+ + + + + + + r + + + i + + + r + + h d q r 9 - r



--------------------
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 6.9.2010, 17:18 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте




Цитата(UniBomb @  6.9.2010,  18:15 Найти цитируемый пост)
Ха-ха, вы думали я забросил это дело?

Ну не то чтобы думали...скорее надеялись smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
UniBomb
Дата 6.9.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




Цитата(diadiavova @  6.9.2010,  18:18 Найти цитируемый пост)
скорее надеялись

 smile  smile 


--------------------
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 16.3.2012, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




Цитата(UniBomb @  7.12.2009,  13:13 Найти цитируемый пост)
. Деление на ноль вызывает неопределённость, а вот бесконечность получается при делении на бесконечно малую величину.

Мне кажется деление на ноль лучше реализовать выводом фразы "стою себе, делю" в количестве, равном значению счетчика. Тем самым мы введем в язык новый функционал и потдержим старый. Тогда можно будет депрекатнуть команду "9" и рекомендовать использовать вместо нее команду "0"

Это сообщение отредактировал(а) Zloxa - 16.3.2012, 12:30


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 16.3.2012, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin




Цитата(Zloxa @  16.3.2012,  13:29 Найти цитируемый пост)
Мне кажется деление на ноль лучше реализовать выводом фразы "стою себе, делю" в количестве, равном значению счетчика. Тем самым мы введем в язык новый функционал и потдержим старый.

Нарушается обратная совместимость, в оригинале:
Цитата
Команда + увеличивает на единицу (инкрементирует) счетчик, который не имеет никакой возможности дальнейшего применения.

А тут уже появляется возможность какого-то применения.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
UniBomb
Дата 17.7.2025, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




Столько воды утекло со времени последнего релиза. И пусть человек еще не ступил на поверхность марса, работа над идеальным интерпритатором продолжается. И пусть уже и надеятся некому, встречайте, новый релиз. Теперь на питоне. Ура, товарищи!

Код

def interpret_hq9p(code: str):
    acc = 0
    output = []
    
    def generate_flooders_song():
        lines = []
        for n in range(99, 0, -1):
            if n == 1:
                line1 = "1 flooder writing comments in the sandbox!"
            else:
                line1 = f"{n} flooders writing comments in the sandbox!"
            
            if n == 1:
                line2 = "He went to the real world... the sandbox is empty!"
            else:
                remaining = n - 1
                if remaining == 1:
                    line2 = f"One went to the real world, {remaining} flooder remains..."
                else:
                    line2 = f"One went to the real world, {remaining} flooders remain..."
            
            lines.append(f"{line1}\n{line2}")
        
        lines.append("The forum is empty.")
        return "\n".join(lines)
    
    flooder_song = generate_flooders_song()
    
    for char in code:
        char = char.upper()
        
        if char == 'H':
            output.append("Hello, world!")
        elif char == 'Q':
            output.append(code)
        elif char == '9':
            output.append(flooder_song)
        elif char == '+':
            acc += 1

    output.append(f"Accum is {acc}")
    print("\n".join(output))

if __name__ == "__main__":
    program = input("_> ")
    interpret_hq9p(program)



--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.