本文简单描述怎么用source insight提供的模板(我也不知道怎么称呼)写自己的语言解析脚本(就叫脚本吧)
以arm 的汇编语言为例。
1)添加语言
Options->Preferences->Languages, click Add button
输入语言名字,如arm_asm。可以看到Language中有了arm_asm这一项。
2)基本配置介绍
选中arm_asm,点击Properties,弹出一个窗口,有4个标签。其中Info基本不用管;Options暂时也不用动;Comments and Ranges是用来描述注释格式的,支持单行和多行注释。arm_asm中用单行注释就可以了;Custom Parsing是重点,在这里用SI支持的正则表示式匹配出函数、变量等的特征。
3)添加Keywords
一些简单的指令高亮就可以在这里实现了。一个简单的方法是先导出(旁边有个Export按键)一种你熟悉的语言的Keywords文件,然后模仿这个格式进行修改,然后在导入(旁边的Import按键)
4)Properties的简单使用
arm_asm中值用到单行的注释,这个很容易实现:指定分号为开注释开始的标识就可以了。你可能会担心会不会有错误的解析,应该说SI基本都能正确解析。然后是Csutom Parsing的使用。这个要用到SI支持的正则表达式,SI的帮助文档上有对这个语法进行说明。这个正则表达式应该是比较简单的那种,看看例子基本就能使用了;另外它只支持单行特征的提取,所以arm汇编的宏特征不能完整的提取出来。不知道是我理解不到位还是真的有这个局限,希望有高手能给解答。下面是arm汇编特征提取的两个例子:
^\([a-zA-Z0-9_|\$]*\)\w*$
符合上述特征的是lable
^\w+AREA\w+|\([\$a-zA-Z0-9_]*\)|\w*
这个area我识别成了function
^\w+AREA\w+\([\$a-zA-Z0-9_]*\)\w*
这个也是area特征的function,有一点小的区别。一个正则匹配不完,我就用了两个。
5)使用自己添加的语言解析脚本
一些必要的特征匹配做完后,可以导出为CLF文件,我叫这个为脚本。其他同学可以导入这个CLF文件来解析语言。导入的步骤就不说了,Properties界面里有个Improt选项。
这个不说了,要上班了。