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

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

合法符号表
第一个版本支持的合法符号列表如下:

 符号 类型编号分类自定义名称
ln1 ln
lg2 lg
log3log
^4pow
Cbrt6cbrt
Sbrt7sbrt
!8fact
sin10sin
cos11cos
asin12asin
acos13acos
tg14tg
ctg15ctg
atg16atg
actg17actg
+18plus
-19minus
*20mutiple
/21divide
%23mod
(24leftbracket
)25rightbracket
ANS26ans
STO27sto
CLR28clr
AX29ax
BX30bx
CX31cx
DX32dx
EX33ex
FX34fx
e35e
PI36pi
浮点数37number
#38sharp

分析策略
采用有限自动机(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值