参考书籍:编译原理。
开发工具:VS2003。
文件:
Scanner.dll(词法分析),其中Scanner.dll为词法分析器,原程序文件为scanner.cs ,源程序文件含:Parser.cs、ChangeTbladduction.cs、ChangeColonToComma.cs。
Parser.dll(语法分析),功能为产生语义分析时所需的语法树,需要引用词法分析器来构造语法树,源程序文件含:Parser.cs、ChangeTbladduction.cs、ChangeColonToComma.cs。其中Parser.cs为主文件;ChangeTbladduction.cs和ChangeColonToComma.cs是将公式字符串中的“:”转换为多个“,”(一直都认为这种方法很笨,不知道Excel和OpenOffice是怎么做的)。
Semantics.dll(语义分析),功能得到公式的最终结果,需要引用Parser.dll和Scanner.dll,源程序文件:Semantics,cs、SemanticsException.cs、MarkerDataSet.cs、Markers.cs、TDouble.cs、ChangeExpression.cs。其中Semantics,cs为主文件;SemanticsException.cs自定义的异常类(可有可无的东西);MarkerDataSet.cs是一个继承的System.Data.DataSet类,用来从数据库中获取公式中表间引用的单元格的值(若本地的可以不需要这个类);Markers.cs用来储存单元格的值,以便计算公式的值;TDouble.cs自己写的一个将字符串转换为Double/Int类型的类(很滥,不知道Excel 是怎么处理类型转换的);ChangeExpression.cs是在当增加了行或列后,同时更改公式(可有可无的东西)。
Scanner词法分析源程序
Parser语法分析原程序
Semantics语义分析源程序
实例程序
ParserApp2.exe得到的是语法树,例如:输入=sum(A1:A5)
结果:
SemanticApp2.exe运行
结果: