Баловство на Python
Apr. 30th, 2021 09:48 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В качестве небольшого pet-project состряпал на Python клон МЭСМ-6 и ассемблера к ней.
Машина проходит основные тесты от МЭСМ-6. В папке examples лежат не столько примеры кода на ассемблере, сколько недо тесты ассемблера. По сути рабочий там hello.asm который печатает в stdout "hello, world!!!"
Скомпилировать его можно так:
и запустить:
Код реализации МЭСМ местами умышленно кучерявый :))))))))), например:
popcount(x) = bin(x).count("1") # раз Python то почему бы и нет!
Синтаксис ассемблера отличается от общепринятых.
Делал с ручной токенизацией по принципу "команда аргумент" для того чтобы понимать на практике во что превращается LL(1) грамматика принятая в языках типа Pascal или Go.
Хотел прикинуть сложность возможной реализации языка Оберон для МЭСМ.
https://github.com/x86128/pymesm
Машина проходит основные тесты от МЭСМ-6. В папке examples лежат не столько примеры кода на ассемблере, сколько недо тесты ассемблера. По сути рабочий там hello.asm который печатает в stdout "hello, world!!!"
# hello world using loop
org 1
ptr prn0 32767
# loop setup
vtm -15,2
lbl loop
xta hello+15,2
atx prn0
vlm loop,2
stop 0o12345,6
dorg 0o2000
arr hello "Hello, world!!!\n"
Скомпилировать его можно так:
python3 asm/asm.py -i examples/hello.asm
и запустить:
python3 pymesm.py -i examples/hello.oct
Остальные тесты лежат в папке test/
Hello, world!!!
CPU halted at 00003 with 12345
Success
Simulation finished.
Код реализации МЭСМ местами умышленно кучерявый :))))))))), например:
popcount(x) = bin(x).count("1") # раз Python то почему бы и нет!
Синтаксис ассемблера отличается от общепринятых.
Делал с ручной токенизацией по принципу "команда аргумент" для того чтобы понимать на практике во что превращается LL(1) грамматика принятая в языках типа Pascal или Go.
Хотел прикинуть сложность возможной реализации языка Оберон для МЭСМ.
https://github.com/x86128/pymesm
no subject
Date: 2021-05-01 01:34 am (UTC)Ранее уже делал заготовки mesm6 на Crystal, Golang, Kotlin, Nim... но МЭСМ-6, конечно, крупноват для задачи "попробовать язык" :)
На Golang тоже будет красиво, у меня есть заготовки, правда не опубликованные поскольку там уж совсем мало инструкций реализовано.
На golang код по плотности такой же как на python получается. С моей точки зрения, golang или rust версии были бы самые практичные.