Assembly ARM统一汇编语言语法和解析器?

Assembly ARM统一汇编语言语法和解析器?,assembly,arm,grammar,Assembly,Arm,Grammar,是否有ARM体系结构参考手册A4.2中所述的ARM统一汇编语言的公开语法或解析器 本文档使用ARM统一汇编语言(UAL)。这种汇编语言语法为所有ARM和Thumb指令提供了一种规范形式 UAL描述每条指令的助记符和操作数的语法 我只是对解析助记符和每条指令的操作数的代码感兴趣。例如,如何为这些行定义语法 ADC{S}{<c>}{<q>} {<Rd>,} <Rn>, <Rm>, <type> <Rs> IT{<

是否有ARM体系结构参考手册A4.2中所述的ARM统一汇编语言的公开语法或解析器

本文档使用ARM统一汇编语言(UAL)。这种汇编语言语法为所有ARM和Thumb指令提供了一种规范形式

UAL描述每条指令的助记符和操作数的语法

我只是对解析助记符和每条指令的操作数的代码感兴趣。例如,如何为这些行定义语法

ADC{S}{<c>}{<q>} {<Rd>,} <Rn>, <Rm>, <type> <Rs>
IT{<x>{<y>{<z>}}}{<q>} <firstcond>
LDC{L}<c> <coproc>, <CRd>, [<Rn>, #+/-<imm>]{!}
ADC{S}{}{}{,},
它{{}{}}{}
LDC{L},[,#+/-]{!}

如果需要根据基于示例的语法创建一个简单的解析器,没有什么比ANTLR更好:

ANTLR将语法规范转换为lexer和解析器代码。它比Lexx和Yacc更直观。下面的语法涵盖了您在上面指定的部分内容,并且很容易扩展以实现您的目标:

grammar armasm;

/* Rules */
program: (statement | NEWLINE) +;

statement: (ADC (reg ',')? reg ',' reg ',' reg
    | IT firstcond
    | LDC coproc ',' cpreg (',' reg ','  imm )? ('!')? ) NEWLINE;

reg: 'r' INT;
coproc: 'p' INT;
cpreg: 'cr' INT;
imm: '#' ('+' | '-')? INT;
firstcond: '?';

/* Tokens */
ADC: 'ADC' ('S')? ; 
IT:   'IT';
LDC:  'LDC' ('L')?;

INT: [0-9]+;
NEWLINE: '\r'? '\n';
WS: [ \t]+ -> skip;
从ANTLR站点(OSX说明):

然后在语法文件上运行:

antlr4 armasm.g4
javac *.java
grun armasm program -tree

    ADCS r1, r2, r3
    IT ?
    LDC p3, cr2, r1, #3 
    <EOF>
antlr4 armasm.g4
javac*.java
格伦军备计划-树
ADC r1、r2、r3
信息技术
LDC p3、cr2、r1和#3
这将生成分解为标记、规则和数据的解析树:

(项目(报表ADC(reg r 1)、(reg r 2)、(reg r 3)\n)(报表IT(firstcond?)\n)(报表LDC(coproc p 3)(cpreg cr 2)(reg r 1)、(imm#-3)!\n))

语法还不包括指令条件代码,也不包括IT指令的细节(时间紧迫)。ANTLR生成一个lexer和parser,然后grun宏将它们包装到测试装备中,这样我就可以在生成的代码中运行文本片段。生成的API可直接用于您自己的应用程序中


为了完整起见,我在网上查找现有语法,但没有找到。您最好的选择可能是分解gasm并提取其解析器规范,但它不会是通用语法,如果这对您很重要的话,它将是GPL。如果您只需要处理指令的一部分,那么这是一个很好的方法。

@dwelch我试图改进这个问题。相关:?对不起,我误解了这个问题。也许gnu汇编程序或gnu c有一些您可以使用的东西。我认为ARM DDI 0406B或ARMv7A ARM的第A4.2章“统一汇编语言”就是规范。它有条件句和标签的子部分。助记符(ASCII字母)在thumb-2和ARM之间已经相当;由汇编程序选择物理编码。我也不确定我是否理解这个问题?@dwelch无需道歉,你帮我理清了思路。+1,因此,如果我理解正确,如果我将所有说明复制并粘贴到一个文件中,antlr可以从中创建语法?对不起,我离开了这么久。不,只是如果你把指令列表翻译成ANTLR语法(这并不难),你会得到一个自动生成的词法分析器和解析器。我很乐意帮忙,因为它对我也很有用。我正在创建一个说明书列表,我会尽快完成它,然后再学习语法。我还在做语法的第一步,但我花在语法上的时间不多。当我有工作时,我会告诉你的。
antlr4 armasm.g4
javac *.java
grun armasm program -tree

    ADCS r1, r2, r3
    IT ?
    LDC p3, cr2, r1, #3 
    <EOF>