A _control flow graph_ is a collection of simple (_i.e.,_ "non-extended")
basic _blocks_ that comprise straight-line sequences of _actions_ with a
single entry point and a single exit point, and a collection of
-directed flow _edges_ (or _arcs_) denoting all possible transfers of
-control flow that may take place during execution from the ends of
-any basic blocks to the beginning of a basic block.
+directed flow _edges_ (or _arcs_) denoting all possible transition of
+control flow that may take place during execution from the end of
+one basic block to the beginning of another (or itself).
+
+A block that has multiple distinct successors in the flow of control
+must end with an action that selects its successor.
The sequence of actions that constitutes a basic block may
include references to user and library procedures.
--- /dev/null
+// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef FORTRAN_EVALUATE_EXPRESSION_H_
+#define FORTRAN_EVALUATE_EXPRESSION_H_
+
+#include "type.h"
+#include "../common/indirection.h"
+#include <variant>
+
+namespace Fortran::evaluate {
+
+template<Classification C, int KIND> struct Expression;
+
+template<int KIND> struct Expression<Classification::Integer> {
+ static constexpr Classification classification{Classification::Integer};
+ static constexpr int kind{KIND};
+};
+
+using<int KIND> IntegerExpression = Expression<Classification::Integer, KIND>;
+using<int KIND> RealExpression = Expression<Classification::Real, KIND>;
+
+} // namespace Fortran::evaluate
+#endif // FORTRAN_EVALUATE_EXPRESSION_H_