现在的位置: 首页 > 综合 > 正文

仿Excle公式

2012年03月29日 ⁄ 综合 ⁄ 共 949字 ⁄ 字号 评论关闭

参考书籍:编译原理。

开发工具: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运行
结果:

抱歉!评论已关闭.