Compiler construction 编译器输出的代码生成器

Compiler construction 编译器输出的代码生成器,compiler-construction,code-generation,st,Compiler Construction,Code Generation,St,我正在编写一个代码生成器,但没有足够的资源来完成。我只有一个旧软件,它有一个ST语言的编译器。 我要做的是从这个编译器的输出,编写我的代码生成器,也许不是最好的方法,但这是我能做的最好的方法 我的问题是,有人知道.4asm扩展是什么意思吗?我该如何为它编写代码生成器 ps:一些输出代码: .prg program1 clssid 13 var bool rst var u295_initvar inizializzazioni var u295_cicloprova ciclo

我正在编写一个代码生成器,但没有足够的资源来完成。我只有一个旧软件,它有一个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

因此,这里有一个编译器为ST语言生成的汇编语言源代码。ST指:

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

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

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


代码看起来像意大利摩托车。我想你需要找一个对这类事情比你通常在这里能找到的更专业的人。

好的一点,事实上我注意到代码是一个专门的汇编程序,我们有ST编译器的源代码,但是很旧,不适合我们的项目。我们没有关于编译器的任何文档,只有源代码和输出.4asm文件以及许多索引文件,我想尝试反向生成4asm文件。但是谢谢你的解释。