Introduction

Expression adalah dasar dari komputasi kompleks dalam bahasa pemrogaman. Untuk memahami expression, kita harus terlebih dahulu memahami urutan operator dan evaluasi operand.

Expression terdiri dari 4 bagian, yaitu:

  • Short Circuit Evaluation
  • Arithmatic Expression
  • Relational Expression
  • Boolean Expression

Short Circuit Evaluation

Short circuit evaluation adalah sebuah expression yang hasilnya tidak ditentukan dari evaluasi seluruh operand dan atau semua operator. Short circuit evaluation dalam C, C++, dan Java digunakan untuk Boolean operators (&& dan ||), tetapi juga menyediakan bitwise Boolean operators yang tidak short circuit evaluation (& dan |).

Arithmatic Expression

Arithmatic expression terdiri dari operator, operand, parentheses, dan function calls.

Berbagai macam operator:

  • Unary operator memiliki 1 operand.
  • Binary operator memiliki 2 operand.
  • Ternary operator memiliki 3 operand.

Berikut adalah urutan eksekusi operator:

  • Parentheses
  • unary operators
  • ** (jika bahasa yang digunakan support)
  • *,/
  • +,-

Berikut adalah urutan evaluasi operand:

  • Variables
  • Constants
  • Parenthesized Expression
  • Operand yang merupakan function call.

Relational Expressions

Relational expression menggunakan relational operators dan operands dari berbagai type. Relational expression dapat dievaluasi dalam sebagian Boolean representation.  Relational expression memiliki 2 operand dan 1 operator serta memiliki hasil Boolean.

Boolean Expression

Boolean expression menggunakan operand Boolean dan hasilnya adalah Boolean. Operatornya merupakan function call (and, or, not).

Grammar

I. A Grammar for Small Language

<program> -> begin<stmt,list>end

<stmt,list> -> <stmt>

|<stmt>;<stmt,list>

<stmt> -> <var>=<expr>

<var> -> A|B|C

<expr> -> <var>+<var>

|<var>-<var>

|<var>

II. A Grammar for Simple Assignment Statement

<asign> -> <id>=<expr>

<id> -> A|B|C

<expr> -> <id>+<expr>

|<id>*<expr>

|(<expr>)

|<id>

III. An Unambiguous Grammar for Expressions

<asign> -> <id>=<expr>

<id> -> A|B|C

<expr> -> <expr>+<term>

|<expr>

<term> -> <term>*<factor>

|<factor>

<factor> -> (<expr>)

|<id>