make the isa transpiler into a module
there's some other stuff as well
This commit is contained in:
parent
badb755812
commit
c93b0b493b
15
cli.py
15
cli.py
|
@ -1,15 +0,0 @@
|
||||||
from server import main
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
def entry():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
prog="desmos-sync",
|
|
||||||
description="Synchronize from local file to Desmos calculator",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument("filename")
|
|
||||||
args = parser.parse_args()
|
|
||||||
main(args.filename)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
entry()
|
|
|
@ -11,6 +11,8 @@ INSTRUCTIONS
|
||||||
------------
|
------------
|
||||||
|
|
||||||
STO ( value, address ) -> store a value into an address
|
STO ( value, address ) -> store a value into an address
|
||||||
|
MOV ( fromaddr, toaddr) -> move a value from one address to another
|
||||||
|
PSTO ( value, ptr ) -> store value into the address referenced in ptr
|
||||||
ADD ( addra, addrb, toaddr ) -> add a value from two addresses to a third address
|
ADD ( addra, addrb, toaddr ) -> add a value from two addresses to a third address
|
||||||
SUB ( addra, addrb, toaddr ) -> subtract a value from two addresses to a third address
|
SUB ( addra, addrb, toaddr ) -> subtract a value from two addresses to a third address
|
||||||
MUL ( addra, addrb, toaddr ) -> multiply a value from two addresses to a third address
|
MUL ( addra, addrb, toaddr ) -> multiply a value from two addresses to a third address
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
ticker 1 : loopaction, loop
|
ticker 1 : main
|
||||||
# Main memory structure
|
# Main memory structure
|
||||||
: B = [1...100] * 0
|
id testing : B = [1, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
|
||||||
# Operations on memory
|
# Operations on memory
|
||||||
: q(l, v, i)=ifval(l, i, [1...length(l)], v)
|
: q(l, v, i)=ifval(l, i, [1...length(l)], v)
|
||||||
: setlistval(index, v) = B -> q(B, v, index)
|
: setlistval(index, v) = B -> q(B, v, index)
|
||||||
|
@ -21,12 +20,17 @@ ticker 1 : loopaction, loop
|
||||||
: idiv(a, b, t_o) = setlistval(t_o, odiv(B[a], B[b]))
|
: idiv(a, b, t_o) = setlistval(t_o, odiv(B[a], B[b]))
|
||||||
: imul(a, b, t_o) = setlistval(t_o, omul(B[a], B[b]))
|
: imul(a, b, t_o) = setlistval(t_o, omul(B[a], B[b]))
|
||||||
|
|
||||||
: icmp(a, b, z) = { a = b : equals -> 1 , a > b : greater -> 1 , a < b : less -> 1}
|
: icmp(a, b, z) = { \
|
||||||
|
a = b : equals -> 1 , \
|
||||||
|
a > b : greater -> 1 , \
|
||||||
|
a < b : less -> 1 \
|
||||||
|
}
|
||||||
: irst(a, b, c) = equals -> 0, greater -> 0, less -> 0
|
: irst(a, b, c) = equals -> 0, greater -> 0, less -> 0
|
||||||
: ield(addr, b) = setlistval(addr, equals)
|
: ield(addr, b) = setlistval(addr, equals)
|
||||||
: igld(addr, b) = setlistval(addr, greater)
|
: igld(addr, b) = setlistval(addr, greater)
|
||||||
: illd(addr, b) = setlistval(addr, less)
|
: illd(addr, b) = setlistval(addr, less)
|
||||||
|
|
||||||
|
|
||||||
: ibe(addr, b, c) = {equals = 1 : ijmp(addr, 0, 0), jumped -> 1}
|
: ibe(addr, b, c) = {equals = 1 : ijmp(addr, 0, 0), jumped -> 1}
|
||||||
: ibne(addr, b, c) = {equals = 0 : ijmp(addr, 0, 0), jumped -> 1}
|
: ibne(addr, b, c) = {equals = 0 : ijmp(addr, 0, 0), jumped -> 1}
|
||||||
: ibg(addr, b, c) = {greater = 1 : ijmp(addr, 0, 0), jumped -> 1}
|
: ibg(addr, b, c) = {greater = 1 : ijmp(addr, 0, 0), jumped -> 1}
|
||||||
|
@ -84,6 +88,7 @@ ticker 1 : loopaction, loop
|
||||||
|
|
||||||
: loop = {execution = 0 : execution -> 1, execution = 1 : execution -> 2, execution = 2 : execution -> 0}
|
: loop = {execution = 0 : execution -> 1, execution = 1 : execution -> 2, execution = 2 : execution -> 0}
|
||||||
: loopaction = {execution = 0 : load(ip), execution = 1 : exec, execution = 2 : incip}
|
: loopaction = {execution = 0 : load(ip), execution = 1 : exec, execution = 2 : incip}
|
||||||
|
: main = loopaction, loop
|
||||||
|
|
||||||
: sto = 1
|
: sto = 1
|
||||||
: add = 2
|
: add = 2
|
||||||
|
@ -101,4 +106,4 @@ ticker 1 : loopaction, loop
|
||||||
: div = 14
|
: div = 14
|
||||||
: rst = 15
|
: rst = 15
|
||||||
|
|
||||||
: instwidth = [2,3,1,1,1,1,1,1,1,1,3,3,3,3,0]
|
: instwidth = [2,3,1,1,1,1,1,1,1,1,3,3,3,3,0]
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
from .server import main
|
||||||
|
import argparse
|
||||||
|
import pyperclip
|
||||||
|
import json
|
||||||
|
|
||||||
|
def get_overrides(file):
|
||||||
|
fd = open(file, "r")
|
||||||
|
data = json.loads(fd.read())
|
||||||
|
fd.close()
|
||||||
|
return data
|
||||||
|
|
||||||
|
def entry():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
prog="desmos-sync",
|
||||||
|
description="Synchronize from local file to Desmos calculator",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument('--copy', action="store_true", help="copy the client side JS to clipboard")
|
||||||
|
parser.add_argument('--run', help="specify file to start the desmos server for")
|
||||||
|
parser.add_argument('--overrides', help="specify file that contains overrides for desmos expressions")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
if args.overrides:
|
||||||
|
args.overrides = get_overrides(args.overrides)
|
||||||
|
|
||||||
|
if args.run:
|
||||||
|
main(args.run, args.overrides if args.overrides else {})
|
||||||
|
elif args.copy:
|
||||||
|
fd = open("console.js", "r")
|
||||||
|
buffer = fd.read()
|
||||||
|
pyperclip.copy(buffer)
|
||||||
|
print("copied")
|
||||||
|
else:
|
||||||
|
parser.print_help()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
entry()
|
|
@ -0,0 +1,4 @@
|
||||||
|
from . import entry
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
entry()
|
|
@ -6,7 +6,7 @@ import json
|
||||||
import random
|
import random
|
||||||
import queue
|
import queue
|
||||||
import functools
|
import functools
|
||||||
from parser import Parser
|
from .parser import Parser, Statement
|
||||||
from watchdog.events import FileSystemEventHandler
|
from watchdog.events import FileSystemEventHandler
|
||||||
from watchdog.events import FileModifiedEvent
|
from watchdog.events import FileModifiedEvent
|
||||||
from watchdog.observers import Observer
|
from watchdog.observers import Observer
|
||||||
|
@ -19,7 +19,7 @@ class FSEHandler(FileSystemEventHandler):
|
||||||
def on_modified(self, event):
|
def on_modified(self, event):
|
||||||
self.queue.put("")
|
self.queue.put("")
|
||||||
|
|
||||||
async def serv(websocket, file):
|
async def serv(websocket, file, overrides={}):
|
||||||
message = await websocket.recv()
|
message = await websocket.recv()
|
||||||
lmtime = 0
|
lmtime = 0
|
||||||
epsilon = 0.25 # tweak this to what makes sense. 0.25 seconds makes sense to me.
|
epsilon = 0.25 # tweak this to what makes sense. 0.25 seconds makes sense to me.
|
||||||
|
@ -44,7 +44,7 @@ async def serv(websocket, file):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
lmtime = time.time()
|
lmtime = time.time()
|
||||||
|
|
||||||
parser = Parser(file)
|
parser = Parser(file)
|
||||||
parser.parse()
|
parser.parse()
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ async def serv(websocket, file):
|
||||||
json.dumps(
|
json.dumps(
|
||||||
{
|
{
|
||||||
"message": "clear",
|
"message": "clear",
|
||||||
"payload": "none",
|
"payload": "none",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -70,25 +70,38 @@ async def serv(websocket, file):
|
||||||
)
|
)
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not line["comment"]:
|
# if the line has been assigned an id, make it so
|
||||||
await websocket.send(
|
if line["id"]:
|
||||||
json.dumps(
|
ident = line.commands["id"]
|
||||||
{
|
print("performing substitution")
|
||||||
"message": "expression",
|
else:
|
||||||
"id": "placeholder" + str(random.randint(1, 100100)),
|
# else just choose a safe option
|
||||||
"payload": line.latex,
|
ident = "placeholder" + str(random.randint(1, 100100))
|
||||||
}
|
|
||||||
)
|
if ident in overrides.keys():
|
||||||
|
to_send = overrides[ident]
|
||||||
|
else:
|
||||||
|
to_send = line.latex
|
||||||
|
|
||||||
|
|
||||||
|
await websocket.send(
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"message": "expression",
|
||||||
|
"id": ident,
|
||||||
|
"payload": to_send,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
)
|
||||||
async def start_server(file):
|
|
||||||
wrapper = functools.partial(serv, file=file)
|
async def start_server(file, overrides):
|
||||||
|
wrapper = functools.partial(serv, file=file, overrides=overrides)
|
||||||
async with serve(wrapper, "localhost", 8765):
|
async with serve(wrapper, "localhost", 8765):
|
||||||
await asyncio.Future()
|
await asyncio.Future()
|
||||||
|
|
||||||
def main(file):
|
def main(file, overrides):
|
||||||
asyncio.run(start_server(file))
|
asyncio.run(start_server(file, overrides))
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main("data/testing.desmos")
|
main("data/testing.desmos")
|
|
@ -0,0 +1,3 @@
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
|
@ -2,6 +2,9 @@
|
||||||
let
|
let
|
||||||
my-python-packages = ps: with ps; [
|
my-python-packages = ps: with ps; [
|
||||||
pip
|
pip
|
||||||
|
pkgs.python311Packages.websockets
|
||||||
|
pkgs.python311Packages.watchdog
|
||||||
|
pkgs.python311Packages.pyperclip
|
||||||
];
|
];
|
||||||
my-python = pkgs.python3.withPackages my-python-packages;
|
my-python = pkgs.python3.withPackages my-python-packages;
|
||||||
in my-python.env
|
in my-python.env
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{"testing": "\\left[1,2,3,4,5,1\\right]"}
|
Loading…
Reference in New Issue