c#实现科学计算器 —— 设计篇之词法分析模块设计

来源:互联网 发布:祖玛java 7723 编辑:程序博客网 时间:2024/06/05 03:45

词法分析模块的功能
  负责对用户输入的表达式进行分词处理,把每一个合法符号(包括数)存入一个特定的存储结构中,能够供之后的文法分析模块和计算模块使用,如果发现非法符号马上停止处理,报错。

合法符号表
第一个版本支持的合法符号列表如下:
 符号  类型编号 分类自定义名称 ln 1 ln lg 2 lg log 3 log ^ 4 pow Cbrt 6 cbrt Sbrt 7 sbrt ! 8 fact sin 10 sin cos 11 cos asin 12 asin acos 13 acos tg 14 tg ctg 15 ctg atg 16 atg actg 17 actg + 18 plus - 19 minus * 20 mutiple / 21 divide % 23 mod ( 24 leftbracket ) 25 rightbracket ANS 26 ans STO 27 sto CLR 28 clr AX 29 ax BX 30 bx CX 31 cx DX 32 dx EX 33 ex FX 34 fx e 35 e PI 36 pi 浮点数 37 number # 38 sharp
分析策略
采用有限自动机(DFA)进行分析,对于特定符号如+、-、*、/、%、(、)、!、^、=,为每一个符号提供一个状态、而其他的一些由字母组成的符号,如ans、pi、sto、clr等,则作为是一个词,之后再对词进行分类处理。
具体的DFA状态图如下:
 

1. 图中每一个箭头表明一个字符的输入,由于这个输入,自动机从一个状态变为另一个状态
2. 图中的负号和减号是两个完全不同的符号,大家不要根据常识认为是一样的,其实在实现时是用'@'代负号的
各状态的说明如下
 状态 说明 对应符号分类名称 S0 初态 S1 整数串 S2 浮点数串 number S3 字母串 ln、lg、log
cos、sin、tg、ctg
acos、asin、atg、actg
cbrt、sbrt、ans、sto、
ax、bx、cx、dx、ex、fx
pi、e S4 + plus S5 - minus S6 * mutiple S7 / divide S8 % mod S9 ! fact S10 ^ pow S11 = S12 ( leftbracket S13 ) rightbracket SX 未知态,出错
=====================================================================
科学计算器正式版已经于2006.1.4发布,详情请见http://tonyqus.cnblogs.com/archive/2006/01/04/310481.html

原创粉丝点击