自Visual Studio里抓取抽象语法树(AST)

前方几乎上测试一个代码生成的软件,测试目的是将软件转的C#还是VB.NET源代码文件,和事先的基准C#要VB.NET源代码文件进行对比。如果实在变化的文书与标准文件来免一样的地方,就证明,软件来地下的编码失误(Bug)。   时的艺术是用片只文本读入内存,一行一行逐字逐字地比。当然啦,为了避免空格的题材,文件事先就以空格都勾掉了。但是,这种措施的问题是,很多时刻,软件生成的源代码文件被,虽然代码行 […]

基于EBNF语法的描述

基于JavaCC的语法描述 动JavaCC从token序列中分辨出”语词” “表达式” “函数调用” 等语法单位之措施。 一味设为JavaCC描述“语词” “表达式” “函数调用” 这样的语法单位分别是由于哪的token序列构成的,就会针对该语法进行解析(parse)。 比如说:最简便易行的赋值表达式可以描述为“符号” “ “=” ” ”表达式“ 的排。 换言之, 如果存在 […]

C语言语法的二义性和token的超前扫描

语法的二义性 JavaCC不能够分析所有EBNF描述的语法,因为EBNF描述的语法本质上有着二义性的状况。 C语言中if语句用JavaCC的EBNF可以是之类描述: “if” “(” expr() “)” stmt() [“else” stmt()] 当可上述规则之具体代码,可以由如下例子: if (cond1) if (cond2) f(); else g(); 根据上面的规则分析下就段代码,直 […]