gpt4 book ai didi

python - 在转换为 Dart 时维护 Python 行号

转载 作者:行者123 更新时间:2023-11-30 04:04:05 25 4
gpt4 key购买 nike

我的项目可以在 The Medusa Project 找到旨在通过将 Python 编译为 Dart 并在 Dart 虚拟机上运行它来更快地运行 Python。一切都很好,与通常的 CPython 实现相比,我实现了高达 1500% 的速度提升。

我的下一个目标是为项目提供错误报告机制。当 Python 代码被编译为经过优化和压缩的 Dart 代码时,所有行号和相关调试信息都会丢失。因此,在运行时,如果某处出现问题,则错误是由 Dart VM 引起的,正如预期的那样,VM 会在生成的 Dart 文件的 Line:Column 中报告错误。我想要的是一种在 Python 文件的相应行中指出错误的方法。

目前我正在使用 ast 模块提供的 NodeVisitor 类将 Python 代码翻译成 Dart。我访问 AST 中的每个节点并为该节点生成 Drat 代码。我正在修复如何维护我获得 Python 代码的行号。我应该选择像 C/C++ 编译器用于调试目的的调试符号表这样的实现,还是应该选择手写的解析器?

示例翻译:

Python代码:

a = input("Enter a number: ")
b = input("Enter another number: ")

print a + b
print a - b
print a * b
print a / b

对应的 Dart 代码:

import'file:///C:/Users/Rahul/.medusa/lib/inbuilts.dart';import'dart:io';var a,b;main(){a=input(str('Enter a number: '));b=input(str('Enter another number: '));stdout.writeln((a+b));stdout.writeln((a-b));stdout.writeln((a*b));stdout.writeln((a/b));}

假设这里 b 为 0,我希望错误显示如果发生在 Python 文件的第 7 行而不是 Dart 文件的 1:245。

谢谢!

最佳答案

正是出于这个原因,JavaScript 采用了源映射:html5rocks

这不是一个完美的格式,但它可能会在这里完成工作。

旁注:Dart VM 尚不支持源映射。因此,您需要解析堆栈跟踪(查看 stack_trace package 中执行此操作的代码),然后将位置映射回来。

关于python - 在转换为 Dart 时维护 Python 行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23945949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com