定义

计算变量,是对一次变量进行数学或逻辑计算,计算的结果作为变量的值。

计算变量的值根据数据类型的不同,可以是小数/整数

计算变量是采用C++的yacc和lex,结合自己代码进行实现

计算变量表达式格式

数字和变量、字符串定义

函数/操作符定义

(这些操作符和函数的字符,在lex.l中定义)


示例

  1. 目标:
    1. 红叉绿箭指示状态,其中红叉(停止)、直行(绿箭)是2个不同的点的地址,其值分别为1或0。
    2. 我们需要将这两个点配置为一个计算点,用1个点的值表示当前是红叉还是绿箭,而不是2个点。该点的值应有三个状态,分别为:
      1. 黑屏
      2. 红叉
      3. 绿箭
      4. 红叉且绿箭(逻辑上不应该存在的状态)
  2.  对象模式下配置
    1. 红叉绿箭类名:车道指示器
    2. 该类的属性 
      1. 绿箭,BOOL类型, 值为1,0
      2. 红叉,BOOL类型, 值为1,0
      3. 红叉绿箭,int8类型,表示当前的红叉绿箭状态
        1. 属性地址:SELF.绿箭*2+SELF.红叉*1      . SELF表示对象本身
        2. 值含义:
          1. 0-→当前是黑屏
          2. 1--→当前是红叉
          3. 2-→当前是绿箭
          4. 3--->逻辑上不应该同时出现红叉和绿箭
    3. 对象。如车道指示器车道指示器11N
      1. 绿箭地址:M150.0,eview实际对象属性:车道指示器11N.绿箭,值为:1,0
      2. 红叉地址:M150.1,eview实际对象属性:车道指示器11N.红叉,值为:1,0
      3. 红叉绿箭,不需要配置对象地址,因为地址和类地址相同。
      4. eview实际对象属性:车道指示器11N.红叉绿箭,值的含义见上面,可能为0,1,2,3
  3. 设备模式下配置
    1. 一级变量名(直接读取自设备的变量)
      1. 车道指示器11N.绿箭,BOOL类型, 值为1,0,地址:M150.0
      2. 车道指示器11N.红叉,BOOL类型, 值为1,0,地址:M150.1
    2. 二级变量
      1. 车道指示器11N.红叉绿箭,int8类型, 地址:车道指示器11N.绿箭*2+车道指示器11N.红叉*1
      2. 可见,该二级变量等于2个一级变量的运算值。值含义:
        1. 0-→当前是黑屏
        2. 1--→当前是红叉
        3. 2-→当前是绿箭
        4. 3--->逻辑上不应该同时出现红叉和绿箭