Web Polygraph 

 Documentation
    Reference Manual
       PGL
          Overview
          Constants
·         Statements
             Expressions
             Declarations
             Code Blocks
          Operators
          Types
          Calls
       Simulation models
       Command options
       User-defined distr
       Loadable modules
       Output
    User Manual
    Workloads

 Downloads
    Copyright
    Changes
    Upgrade

 Support
    Wish List
    Sponsors
    Mailing List
    Users

 Miscellaneous
    Results
    Compliance
    Other Tools
    Search

  

Home · Search · Print · Help 


Statements

PGL code is a sequence of statements separated by semicolumns. There are three major kinds of statements: ``expression statements'', ``declaration statement'', and ``code blocks''. All are described below.

1. Expression Statement

There are two kinds of expression statements: ``assignments'' and function or procedure ``calls''. All have syntax common to procedural languages.

bar.field1 = 1235;
foo = bar;
f(foo, bar);
z = normal(10sec, 3sec);

When many field modifications to the same object are required, it is often convenient to use a scope operator. The two pieces of code below are equivalent.

foo.field1 = 1;
foo.field2 = "something";
foo.field3 = '127.0.0.1';

// same using foo's scope
foo = {
    field1 = 1;
    field2 = "something";
    field3 = '127.0.0.1:8080';
};

PGL uses the same rules for scoped statements as for the statements inside a code block (see below). For example, you can declare new [local] variables inside a scope operator.

2. Declaration Statements

These are no different from declarations in C and many other languages. All declarations start with the object type and may have an optional initialization clause. Just remember that every object in PGL must be declared exactly once and before first use.

int i;
string s = "something";
rate peak_rate = 140/sec;
addr[] hosts = '10.13.0-4.1-250';

Bench TheBench = {
    client_side.addr_mask = 'fxp0::192.176.0.0/16';
    server_side.max_host_load = peak_rate;
};

3. Code Blocks

Sometimes it is convenient to group several statements into a ``block''.

// do magical calculations
{
    int foo = 12345;
    int bar = foo / clientHostCount(TheBench);
    working_set_capacity(foo);
}
int foo = 0; // this is a different foo

As the above example illustrates, variables declared inside a block are local to that block.


Home · Search · Print · Help