如何设计生成 Python 代码的代码生成器
How to design a code generator that generates Python code
我当前的项目要求我读取存储在配置文件中的数据并从中生成硬件抽象层代码。配置数据结构以低级方式描述数字硬件(具有 registers/bitfields 的组件、上电复位值等)。根据这些数据,我需要自动生成 Python 代码,供其他应用程序开发人员使用,以便在其上编写应用程序。就像我之前说的,这个想法是为更高级别的应用程序提供一个HAL。
我的问题是:你会用什么方法来解决这个问题?对我来说,使用 Python 作为代码生成器感觉很自然。我不知道是否有更好的工具来完成这项任务 (yacc/bison?)。我的设计理念是让一个静态程序组件重新分配并处理通信处理、日志记录和所有通用的东西。另一个依赖于硬件的组件将完全自动生成并使用静态组件的 API。
你想要做的是使用Program Transformation System (PTS)。
这些 tools/frameworks 接受一种或多种计算机语言的描述,然后允许您编写将一种语言映射到另一种语言的规则。在您的情况下,您想为硬件定义 "configuration files" 的语言,并编写将配置文件的各种模式映射到 Python 代码片段(可能是声明,可能是语句,可能是功能),提供您所需的硬件 API.
坚持将 PTS 放在 Python 中只会将您的选择限制为几乎空集,除非您认为自己要构建 PTS。那也不会发生。认为使用解析器是一个很好的步骤是正确的,但这只是真正可行的解决方案的一小部分;请参阅我关于 Life After Parsing 的文章,了解您为何需要完整的 PTS。
我当前的项目要求我读取存储在配置文件中的数据并从中生成硬件抽象层代码。配置数据结构以低级方式描述数字硬件(具有 registers/bitfields 的组件、上电复位值等)。根据这些数据,我需要自动生成 Python 代码,供其他应用程序开发人员使用,以便在其上编写应用程序。就像我之前说的,这个想法是为更高级别的应用程序提供一个HAL。
我的问题是:你会用什么方法来解决这个问题?对我来说,使用 Python 作为代码生成器感觉很自然。我不知道是否有更好的工具来完成这项任务 (yacc/bison?)。我的设计理念是让一个静态程序组件重新分配并处理通信处理、日志记录和所有通用的东西。另一个依赖于硬件的组件将完全自动生成并使用静态组件的 API。
你想要做的是使用Program Transformation System (PTS)。
这些 tools/frameworks 接受一种或多种计算机语言的描述,然后允许您编写将一种语言映射到另一种语言的规则。在您的情况下,您想为硬件定义 "configuration files" 的语言,并编写将配置文件的各种模式映射到 Python 代码片段(可能是声明,可能是语句,可能是功能),提供您所需的硬件 API.
坚持将 PTS 放在 Python 中只会将您的选择限制为几乎空集,除非您认为自己要构建 PTS。那也不会发生。认为使用解析器是一个很好的步骤是正确的,但这只是真正可行的解决方案的一小部分;请参阅我关于 Life After Parsing 的文章,了解您为何需要完整的 PTS。