【问题标题】:Code generator for a compiler output编译器输出的代码生成器
【发布时间】:2014-06-24 23:20:31
【问题描述】:

我正在编写代码生成器,但没有足够的资源来完成它。我只有带有 ST 语言编译器的旧软件。 我想做的是从这个编译器的输出中,编写我的代码生成器,也许不是最好的方法,但我能做到的最好。

我的问题是,有人知道“.4asm”扩展是什么意思吗?我该如何编写代码生成器?

ps:一些输出代码:

.prg program1
clssid 13
var    bool rst
var    u295_initvar inizializzazioni
var    u295_cicloprova cicloprova
var    u295_elaboratest elaboratest
var    u295_salvadati salvadati
var    u295_assegnazioni assegnazioni
var    u295_allarmi allarmi
var    udint d
var    bool testen
var    u295_ricercazero ricercazero
var    u295_startmotore startmotore
var    uint count
var    u295_default default
var    dint j
var    u295_tara tara
var    uint countdelay
var    u295_blinkled blinkled
bp              0   ;"(27,2)"
stmtbeg         2   ;"(27,2)"
PSHD_IN_32      d
PSHC_01_32
add_udint       
POPD_IN_32      d

stmtbeg         3   ;"(28,2)"
PSHC_00_32
POPD_IN_32      j

stmtbeg         4   ;"(29,13)"
PSHC_TX         '1.10'
LEAO_ID         objid(__global_inst) offsetof(__global,revisioneplc)
MOVE_STRING     

stmtbeg         5   ;"(30,1)"
PSHD_IN_1       rst
not_bool        
PSHD_GI_8       ch0_in_16_23
PSHC_VV_8       byte#16#f0
and_byte        
PSHC_VV_8       byte#16#a0
eq_byte         
PSHD_IN_1       testen
or_bool         
and_bool        
jmpcn           @L0  ;to else
    stmtbeg         6   ;"(32,5)"
    PSHC_01_1
    POPD_IN_1       rst

    stmtbeg         7   ;"(33,2)"
    CALB_PN         clsid(u295_initvar) inizializzazioni

    stmtbeg         8   ;"(34,2)"
    PSHC_00_1
    POPO_IN_1       ricercazero offsetof(u295_ricercazero,start)
    CALB_PN         clsid(u295_ricercazero) ricercazero

...

【问题讨论】:

    标签: compiler-construction code-generation st


    【解决方案1】:

    因此,您所拥有的是由 ST 语言的编译器生成的汇编语言源代码。 ST指的是:

    PLC 结构化文本语言,由 IEC 1131-3 PLC 语言规范(IEC,1993)定义。结构化文本 (ST) 是用于 PLC 的高级、块结构、基于文本的语言。它与 Pascal 类似,但有许多源自其 PLC 应用程序的重要区别。 ST 程序在 PLC 扫描中重复执行,并在固定的 PLC 内存映射 I/O 基础上运行。大多数 ST 实施符合 IEC 1131-3 ST 规范24。附录 A 中提供了有关 ST 一般特征的更多信息。

    如果您有 ST 中的源代码程序,那么您可以使用 ST 编译器对其进行编译。如果您有 PLC,那么您应该拥有将生成的代码编译成它可以接受的形式所需的工具。如果你没有这些东西,这将是一场艰苦的战斗。

    如果此代码位于名为 .4asm 的文件中,则这是编译到特定 PLC 中的汇编语言。如果你知道什么PLC,你就知道什么编译器。

    代码看起来像意大利摩托车。我认为你需要找一个比通常在这里找到的更了解这些事情的人。

    【讨论】:

    • 好点,事实上我注意到代码是一个特定的程序集,我们有 ST 编译器的源代码,但是很旧,不适合我们的项目。我们没有任何关于编译器的文档,只有源代码和输出(.4asm 文件和许多索引文件),我想尝试将反向工程转换为 4asm 文件。但是感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-05-29
    相关资源
    最近更新 更多