zoukankan      html  css  js  c++  java
  • 仿Excle公式

    参考书籍:编译原理。

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

  • 相关阅读:
    童鞋,[HttpClient发送文件] 的技术实践请查收
    有关[Http持久连接]的一切,卷给你看
    浅谈MemoryCache的原生插值方式
    HTTP1.1 KeepAlive到底算不算长连接?
    C2 hits the assertion assert(base>is_AddP()) failed: should be addp but is Phi
    C2 EA
    OOM Hook
    C2 Loop predicate
    C2 Build IR
    C2 CCP
  • 原文地址:https://www.cnblogs.com/nikytwo/p/Excle_Formla.html
Copyright © 2011-2022 走看看