Primaries



next up previous contents index
Next: Statements Up: Expressions Previous: Constant Expressions

Primaries

A primary is a limited kind of expression that can be used in the left hand side of an assignment (5.2), or in an invocation statement (8.1) or a store statement (8.2). The syntax of primaries rules out expressions that would be ambiguous in these situations, namely, expressions that begin with a left parenthesis and expressions that use infix and prefix operators at the top level.

Primaries are defined as follows:

<primary> -> <simple_expr>
          |  <primary> "." <idn>
          |  <primary> "." <method_idn>
          |  <simple_invoc>
          |  <primary> "[" <expr> "]"

<simple_expr> -> <literal>
              |  <idn> [<actual_parms>]
              |  self
              |  <method_idn>
              |  <tagged_type_desig> "{" <field_inits> "}"
              |  <type_designator> "{" [<ivar_inits>] "}"
              |  bind "(" <expr> <bind_args> ")"

<simple_invoc> -> <primary> "(" [ <args> ] ")"
Here are some examples:
        (a[x])    % not legal -- starts with (
        x + y     % not legal -- infix notation at top level
        a[x+y]    % legal (for a: array[int] and x, y: int)
        p(x)      % legal (for p: proc(int) and x: int)



theta-questions@lcs.mit.edu