Forth

Forth

Складна

Вказівки

Реалізуйте обчислювач для дуже простої підмножини Forth.

Forth належить до стекових мов програмування. Реалізуйте дуже простий обчислювач для невеликої підмножини Forth.

Обчислювач має підтримувати такі слова:

  • +, -, *, / (арифметика з цілими числами)
  • DUP, DROP, SWAP, OVER (операції зі стеком)

Обчислювач також має підтримувати визначення нових слів за допомогою звичного синтаксису: : word-name definition ;.

Задля простоти потрібно підтримувати лише один тип даних: знакові цілі числа розміром щонайменше 16 біт.

Для синтаксису діють такі правила: число - послідовність з однієї або більше (ASCII) цифр, а слово - послідовність з однієї або більше літер, цифр, символів або розділових знаків, яка не є числом. (Forth, імовірно, використовує дещо інші правила, але це досить близько.)

Слова не чутливі до регістру.

Реалізація

У Forth функції називаються words, і вони працюють зі стеком даних. Кожне слово бере свої параметри зі стека й повертає результат назад на стек.

Документація Forth завжди містить стан стека даних до виконання слова й після його виконання в такому вигляді: ( p1 p2 ... pN --- r1 r2 ... rN ). Значення від p1 до pN позначають параметри слова на стеку до виклику (вище в стеку можуть бути ще якісь дані, тут не показані), а значення від r1 до rN позначають результати слова на стеку після виклику. Роздільник --- відокремлює стан стека до виконання слова від стану після нього.

Слова, які треба реалізувати, визначено так:

  • ToS означає Top of Stack (вершина стека)
  • Вершину стека записують як найправіше значення
слово стан стека опис
+ ( a b --- sum ) sum = a + b
- ( a b --- diff ) diff = a - b
* ( a b --- prod ) prod = a * b
/ ( a b --- quot ) quot = a / b
dup ( a --- a a ) дублює значення на вершині стека
drop ( a --- ) прибирає значення з вершини стека
swap ( a b --- b a ) міняє місцями два значення на вершині стека
over ( a b c --- a b c b ) копіює друге значення на вершину стека

Якщо хочеться погратися з онлайн-інтерпретатором Forth або дізнатися більше про слова, які треба реалізувати, зазирнімо до Easy Forth (зокрема до розділів Adding Some Numbers, Defining Words і Stack Manipulation).

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Odin Exercism

Час розпочати Forth?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Odin, а також 73 вправи та справжнє наставництво від людей, і все це безкоштовно.