| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 编程开发 > VB教程 > 文章正文 用户登录
黄色壁纸:品味细
继续表达式求值—
一个在Flash里面使
在FLASH中使用正则
MySql正则表达式的
表达式编译计算器
利用API 实现字符
ATL正则表达式库使
数据结构学习(C+
为什么C++编译器不

表达式编译计算器(下)           

表达式编译计算器(下)

作者:佚名 来源:csdn 作者: wxj_lake 更新:2006-8-25 21:05:35 错误报告 我要投稿
表达式编译计算器(下)

Ken J  VB 加油站

概述

本篇是讲如何实现一些更强大的功能, 可自己定义的宏及增加数据类型检查功能和错误处理。

自定义宏

根据我们的语法定义, 替换宏是包含在字符 ` (左上与~一起)中的数字, 比如一个合法的宏写法是 `12` , 我们可能让该宏代表一个数组的索引或者是数据库中的某个字段的索引, 或是其他什么, 由于有非常多的可能性, 我把宏的处理用事件来处理。

Public Event GetGrid(No, Ret) '宏的事件, No 为宏的编号, Ret为返回值

' 读入一个宏
Private Function ReadField(Str1 As String)
Dim C1 As String
Dim rets As String
C1 = ReadNumber(Str1) '读入宏的编号
If C1 <> "" Then
RaiseEvent GetGrid(C1, rets) '发生宏计算事件
ReadField = rets
End If
C1 = ReadChar(Str1)
Do While C1 <> "" And C1 = " "
C1 = ReadChar(Str1)
Loop
If C1 <> "`" Then
ErrorStr = "需要 `"
End If
End Function

由上面的代码看到, 对于宏的计算不是在类内部完成的, 而是利用事件, 把该具体计算交给了程序来处理。一个可能的宏处理过程可能如下:

' 自己定义的宏函数
' 该宏简单地把所有的宏编号*2 返回
Private Sub Syscomp2_GetGrid(No As Variant, Ret As Variant)
Ret = CStr(Val(No) * 2)
End Sub

如果使用该宏计算, `2` 的值就是4。您明白了吗?

使用类

调用该类非常简单:

Private Sub Command1_Click()
Dim Comp1 As New CompStr
MsgBox Comp2.GetExp(Text1) '计算Text 的值
Set Comp1 = Nothing
End Sub

如果是使用宏的情况:

Dim WithEvents Syscomp1 As CompStr

Private Sub Syscomp1_GetGrid(No As Variant, Ret As Variant)
Ret = CStr(Val(No) * 2) '或其他可能的处理
End Sub

Private Sub Command1_Click()
Dim Comp1 As New CompStr
Set Syscomp1 = Comp1
Comp1.ErrorStr = ""
MsgBox Comp1.GetExp(Text1)
Set Syscomp1 = Nothing
Set Comp1 = Nothing
End Sub

数据类型和错误处理

在该类里没有实现的是数据类型检查和错误处理, 因为我的程序中不需要这些功能, 所以没有增加上。

数据类型是使用一个变量 CurType 来实现的, 每次的求值后, 设置 CurType , 可以控制值的类型。 目前, 该类对 "123" + 333 的计算是不会出错的, 而是得到结果 456 ,增加数据类型检查可以要求有严格的表达式书写。

属性 ErrorStr 来表示最后出现的表达式编译错误。 但是目前在类中没有错误处理。

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。