用于编译器输出的代码生成器

时间:2014-05-07 19:47:22

标签: compiler-construction code-generation st

我正在编写代码生成器,但没有足够的资源来执行此操作。我只有拥有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

...

1 个答案:

答案 0 :(得分:0)

那么你所拥有的是由ST语言的编译器生成的汇编语言源代码。 ST指的是:

  

PLC结构化文本语言,由IEC 1131-3 PLC语言规范(IEC,1993)定义。结构化文本(ST)是一种用于PLC的高级,块结构,基于文本的语言。它与Pascal类似,但从PLC应用程序中得出了许多重要的差异。 ST程序在PLC扫描中重复执行,并在固定的PLC存储器映射I / O基础上运行。大多数ST实现符合IEC 1131-3 ST规范24。有关ST一般特性的更多信息见附录A.

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

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

代码看起来像意大利摩托车。我认为你需要找到一个比这里常见的人更专业的知识。