Wingpath to cease trading on 25 October 2025

From 25 October 2025 we will no longer be selling licences for our software products (ModSnmp, ModMultiSim, Modsak, ModSlaveSim, ModMaster and ModTest).

The website will remain operational until at least 2027 for reference purposes, and for the registration and transfer of product licences.

ModSlaveSim help v3.07 - 5.1. Lexical Structure

Download manual: HTML

5.1. Lexical Structure

ModSlaveSim contains 4 classes of tokens: identifiers, constants, operators and keywords.

token:
        identifier
        keyword
        constant
        operator
      

Whitespace (space, newlines, tabs) is ignored except in its role as a separator of tokens.

  1. Identifiers

     identifier :
          $$
          $ integer_constant
          

    An identifier is a $ followed by a sequence of digits.

    In ModSlaveSim an identifier is used to refer to a register. An expression may contain a reference to any register, including itself. An alternative way to refer to itself is by using the form $$.

    To identify a specific register, the register address is used as the sequence of digits after the $. The minimum value for an address is 0 and the maximum value 'model address' is 2147483647 (see Map Addresses). Identifiers can therefore occur in the range $0 to $2147483647.

    A warning message appears when an expression contains a reference to a register that has not yet been entered (declared). It is possible to continue and enter the register later.

  2. Keywords

    keyword : if | then | else | CycleTime | TimeNow
          

    Keywords are all case-sensitive. TimeNow and CycleTime are ModSlaveSim variables (see section Pre-defined Variables).

  3. Constants

    constant :
            integer_constant
            floating_constant
          

    integer_constant : integer
    integer : digit digit*
    digit : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
          

    An integer_constant is a digit followed by zero or more digits.


          

    floating_constant : 
            integer period
            integer period? exponent
            integer? period integer exponent?
    period : .
    exponent :
             E sign? integer
             e sign? integer
    sign :
             +
             -
          

    A floating_constant must have either a period [.] or an exponent e.g. [e-3], but may have both. It must also have an integer component either for the whole number part, or the fraction part, or both. The following are all valid examples::

            67.    67.0     67.89     0.89    .89 
            6e-3   67.e+4   67.89e-2  0.89e1  .89e-4

    For all constants, a sequence of digits is taken to be in decimal radix.

  4. Operators

    operator : 
            ()     
            ~     
            unary_sign     
            * | / | %
            binary_sign 
            << | >>    
            &    
            bitwise_or 
            < | > | <= | >= | == | !=
            !    
            &&
            ||
          

    An operator specifies an operation to be performed that returns a value. The object that the operator acts upon is the operand.

    The ( ) operator shall always occur in a pair.