|  | Home | Libraries | People | FAQ | More | 
The notation we will use will be of the form:
a: A, b: B, ... --> composite-expression: composite-attribute
        a, b,
        etc. are the operands. A,
        B, etc. are the operand's
        attribute types. composite-expression
        is the expression involving the operands and composite-attribute
        is the resulting attribute type of the composite expression.
      
For instance:
a: A, b: B --> (a >> b): tuple<A, B>
        reads as: given, a and b are parsers, and A
        is the type of the attribute of a,
        and B is the type of the
        attribute of b, then the
        type of the attribute of a >> b
        will be tuple<A, B>.
      
| ![[Important]](../../images/important.png) | Important | 
|---|---|
| 
          In the attribute tables, we will use  | 
| Expression | Attribute | 
|---|---|
| 
                  Sequence ( | 
 a: A, b: B --> (a >> b): tuple<A, B> a: A, b: Unused --> (a >> b): A a: Unused, b: B --> (a >> b): B a: Unused, b: Unused --> (a >> b): Unused a: A, b: A --> (a >> b): vector<A> a: vector<A>, b: A --> (a >> b): vector<A> a: A, b: vector<A> --> (a >> b): vector<A> a: vector<A>, b: vector<A> --> (a >> b): vector<A> 
 | 
| 
                  Expectation operator ( | 
 a: A, b: B --> (a > b): tuple<A, B> a: A, b: Unused --> (a > b): A a: Unused, b: B --> (a > b): B a: Unused, b: Unused --> (a > b): Unused a: A, b: A --> (a > b): vector<A> a: vector<A>, b: A --> (a > b): vector<A> a: A, b: vector<A> --> (a > b): vector<A> a: vector<A>, b: vector<A> --> (a > b): vector<A> 
 | 
| 
                  Alternative ( | 
 a: A, b: B --> (a | b): variant<A, B> a: A, b: Unused --> (a | b): optional<A> a: A, b: B, c: Unused --> (a | b | c): optional<variant<A, B> > a: Unused, b: B --> (a | b): optional<B> a: Unused, b: Unused --> (a | b): Unused a: A, b: A --> (a | b): A 
 | 
| 
                  Difference ( | 
 a: A, b: B --> (a - b): A a: Unused, b: B --> (a - b): Unused 
 | 
| 
                  Kleene ( | 
 a: A --> *a: vector<A> a: Unused --> *a: Unused 
 | 
| 
                  Plus ( | 
 a: A --> +a: vector<A> a: Unused --> +a: Unused 
 | 
| 
                  List ( | 
 a: A, b: B --> (a % b): vector<A> a: Unused, b: B --> (a % b): Unused 
 | 
| 
                   | 
 a: A --> repeat(...,...)[a]: vector<A> a: Unused --> repeat(...,...)[a]: Unused 
 | 
| 
                  Optional ( | 
 a: A --> -a: optional<A> a: Unused --> -a: Unused 
 | 
| 
                   | 
                   | 
| 
                   | 
                   |