Шеста задача

  1. Шеста задача е тук! Трябва да имплементирате интерпретатор за език, базиран на кариерата на този младеж.

    Това е бонус задача. Като такава, не се брои към минималния брой предадени задачи, за да завършите курса, и не вдига летвата на скалата за оценяване. Една идея по-сложна е от досегашните домашни. За сметка на това имате седмица и половина, носи 10 точки и е изключително забавна.

    Срокът е до четвъртък (29. декември) 19:00 ч.

    Може да задавате всякакви въпроси по условието тук.

  2. Весела Коледа и Рубинена Нова Година!

    Нямам много опит с интерпретатори, но условието ArnoldC+- кодът да се подава като блок ми се видя странно.

    Досега в блоковете сме писали само Руби код - това значи ли, че за да работи интерпретаторът, трябва да дефинирам ключовите думи на ArnoldC+- като някакви методи в Руби? Всъщност може ли блок в Руби да съдържа код, който не е валиден Руби код?

    Друга идея ми се струва да се опитам да превърна блока в стринг и после да парсвам стринга, но доколкото разбрах, не това искате.

    Какво да направя?

  3. Това, което ви подаваме в блока е валиден Ruby код. Не можеш директно да вземеш блок в Ruby като стринг. Ще трябва някак да изпълниш този код, пък той може да генерира каквото ти трябва.

  4. Ясно, благодаря! Даже се сетих как може да стане това.

    А да проверяваме ли съдържанието на блока за коректност? Т.е. има ли значение какво ще се случи, ако подадем неправилен ArnoldC+- код?

  5. Какъв код може да се изпълнява извън "main функцията" дефинирана от ts_showtime/you_have_been_terminated? От примерите и тестовете става ясно, че можем да дефинираме функции, но можем ли да дефинираме променливи? Можем ли да изпълняваме други функции?

  6. Използваш ги като аритметични.

    get_to_the_chopper bool_var
    here_is_my_invitation 11
    you_are_not_you_you_are_me 8
    enough_talk
    
    talk_to_the_hand bool_var
    

    Този код ще изведе 0, защото bool_var първо става 11, а после става 11 == 8, т.е. false, което е 0 в ArnoldC+-.

    get_to_the_chopper new_bool
    here_is_my_invitation bool_var
    consider_that_a_divorce no_problemo
    enough_talk
    
    talk_to_the_hand new_bool
    

    Това пък извежда 1, защото new_bool първо става равно на bool_var, което е 0, а после става равно на 0 or no_problemo, което е 1, защото no_problemo е 1.

    Мисля, че условията на if трябва да са само променливи или числа.

  7. @Михаил, няма нужда. Няма да тестваме с каквато и да е вариация на невалиден ArnoldC+- код също.

    @Николина, what Петър said. И действително условията могат да са само променливи или числа.

    @Петър, да. main функцията е съвсем обикновена функция, с разликата, че се дефинира по различен начин и се изпълнява веднага след като се parse-не програмата. В нея (както и в другите функции) могат да се дефинират функции.

Трябва да сте влезли в системата, за да може да отговаряте на теми.