MIPS解释器

dashmips的Python项目详细描述


dashmips

dashmips是一个mips解释器cli程序。

要求

dashmips除了需要python 3.7之外没有其他依赖项。 python 3.6中有一个dataclasses模块可以使这个模块工作,但它没有经过测试。

安装

建议使用pip:

安装dashmips
pip install dashmips

用法

如果您是通过pip安装的,那么现在您的路径中应该有一个二进制文件,您可以通过键入:

dashmips

或等效

python -m dashmips

“编译”

要编译或运行mips程序,请运行:

dashmips compile FILE.mips

“编译”在dashmips中的意思是将源文件转换为json格式,程序可以更好地理解这种格式。您可以使用此json格式检查dashmips如何解释mips程序的内部。

运行

这个很简单:

dashmips run FILE.mips

Note: FILE is a positional argument in the run subcommand

调试

<>为了为调试DASMIPS留下一个灵活的环境,不提供一个用于MIPS程序的人调试的接口。所包含的调试器是一个服务器,它通过网络接受mips程序的json格式,并将执行请求的操作,返回更新的mips program json对象。

有一个vscode扩展可以说特定于dashmips的json语言here

调试协议

如果要继续手动调试,请注意有关协议的小说明。发送到调试服务器的json应采用以下格式:

interfaceDebugMessage{command:'start'|'step'|'continue'|'stop';program: MipsProgram;// MipsProgram can be found in `dashmips/models.py`// properties below are optionalbreakpoints?: number[];message?: string;error?: boolean;}

列出的命令是startstepcontinuestop。简而言之,每个操作都执行以下操作:

  • 开始:将电脑设置为主标签
  • 步骤:从当前电脑上只运行一条指令
  • 继续:在当前电脑和断点之间运行尽可能多的指令
  • 停止:不执行任何操作

服务器被设计为无状态,因此它可以同时处理许多客户端。

贡献

设置

如果您想为dashmips项目做出贡献,您将需要以下内容:

  • Poetry用于依赖项,它将帮助您启动并运行
  • 安装poetry并克隆此存储库之后:
  • poetry install-将在不会损害全局设置的虚拟环境中安装dashmips依赖项。
  • poetry run X-可以在正确的python环境中运行x命令
  • 尝试poetry run pytest --tap-stream --tap-outdir=testout --mypy --docstyle --codestyle以确保所有测试都正确通过

添加系统调用/添加指令

可以使用相关的装饰器(^ {CD11>})在^ {CD9>}和^ {CD10>}目录中添加现有文件。 如果向这些子目录中的新文件添加指令或系统调用,请确保使用以下模式命名新文件:*_instructions.py*_syscalls.py,其中*是您选择的任何标识符。

测试环境安装

为了确保dashmips在干净的环境中正确安装,我创建了一个dockerfile,它为dashmips设置了所需的最小env。下面的命令可用于创建图像。

docker build --rm -f "tests\test_env\Dockerfile" -t dashmips_test_env:latest .

快乐编码!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有嵌套JAR的java RCP ClassNotFoundException   java在输入框中设置默认值,crud应用程序使用spring   java如何在Heroku中使用fs创建新文件   java将JPanel放在JFrame中   java这个正则表达式会匹配“i.imgur.com/xxx”吗?   java在片段内创建RecylerView,而无需在Android中设置片段   Android上Groovy导致java错误的双精度浮点精度损失   swing Java查找JFrame属于JPanel的内容   java Spring junit自连线自定义类本身必须有构造函数吗?   java textswitcher支持前面的文本   从Android客户端到JAXRS的java Post自定义对象   java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进   拒绝用户“root”@“localhost”的java c3p0访问(使用密码“是”)   使用Selenium Webdriver自动化ExtJS应用程序时java面临的问题