Skip to content

Commit

Permalink
feat: ✨ add cli argparse
Browse files Browse the repository at this point in the history
  • Loading branch information
maxbarsukov committed Jun 20, 2024
1 parent 41708c7 commit a66ce2e
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 18 deletions.
49 changes: 44 additions & 5 deletions src/machine/main.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from __future__ import annotations

import argparse
import logging
import sys

from src.constants import CALL_STACK_CAPACITY, INSTRUCTION_LIMIT, STACK_CAPACITY
from src.isa import read_data, read_instructions
Expand Down Expand Up @@ -30,10 +30,49 @@ def main(instructions_file: str, data_file: str, input_file: str, output_from_po


def start() -> None:
logging.getLogger().setLevel(logging.DEBUG)
assert len(sys.argv) == 4, "Wrong arguments: machine.py <data_file> <code_file> <input_file>"
_, instructions_file, data_file, input_file = sys.argv
main(instructions_file, data_file, input_file, [1, 2])
parser = argparse.ArgumentParser(description='CSA Lab 3 machine runner.')
parser.add_argument('instructions_file', type=str, help='File with instructions')
parser.add_argument('data_file', type=str, help='File with data')
parser.add_argument('input_file', type=str, help='File with user input')
parser.add_argument(
'--log_level',
type=str,
default='',
choices=['FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'NOTSET', ''],
help='Log level [FATAL, ERROR, WARN, INFO, DEBUG, NOTSET]'
)
parser.add_argument(
'--output_ports',
type=str,
default='1, 2',
choices=['1', '2', '1;2'],
help="IO ports to print output ['1', '2', '1;2']"
)

args = parser.parse_args()

if args.log_level == 'FATAL':
level = logging.FATAL
elif args.log_level == 'ERROR':
level = logging.ERROR
elif args.log_level == 'WARN':
level = logging.WARN
elif args.log_level == 'INFO':
level = logging.INFO
elif args.log_level == 'DEBUG':
level = logging.DEBUG
else:
level = logging.NOTSET

if args.output_ports == '1':
ports = [1]
elif args.output_ports == '2':
ports = [2]
else:
ports = [1, 2]

logging.getLogger().setLevel(level)
main(args.instructions_file, args.data_file, args.input_file, ports)


if __name__ == "__main__":
Expand Down
15 changes: 8 additions & 7 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from src.translator import translate
import logging
import sys

from src.translator.main import main as translate
from src.machine.main import main as machine

def start() -> None:
with open("./examples/hello_world.asm", encoding="utf-8") as f:
source = f.read()

instr, data = translate(source)
print(instr)
print(data)
def start() -> None:
logging.getLogger().setLevel(logging.DEBUG)
translate(sys.argv[1], "./dbg/i.txt", "./dbg/d.txt")
machine("./dbg/i.txt", "./dbg/d.txt", "./dbg/input.txt", [1,2])
15 changes: 9 additions & 6 deletions src/translator/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

import sys
import argparse

from src.isa import (
Data,
Expand Down Expand Up @@ -47,11 +47,14 @@ def main(source_file: str, target_instructions_file: str, target_data_file: str)


def start():
assert (
len(sys.argv) == 4
), "Wrong arguments: translator.py <input_file> <target_instructions_file> <target_data_file>"
_, source_file, target_instructions_file, target_data_file = sys.argv
main(source_file, target_instructions_file, target_data_file)
parser = argparse.ArgumentParser(description='CSA Lab 3 translator.')
parser.add_argument('source_file', type=str, help='File with asm code')
parser.add_argument('target_instrs_file', type=str, help='File to write instructions after compilation')
parser.add_argument('target_data_file', type=str, help='File to write data after compilation')

args = parser.parse_args()

main(args.source_file, args.target_instrs_file, args.target_data_file)


if __name__ == "__main__":
Expand Down

0 comments on commit a66ce2e

Please sign in to comment.