9#ifndef FORTRAN_PARSER_EXPR_PARSERS_H_
10#define FORTRAN_PARSER_EXPR_PARSERS_H_
12#include "basic-parsers.h"
13#include "token-parsers.h"
14#include "type-parsers.h"
15#include "flang/Parser/parse-tree.h"
21template <
typename PA>
inline constexpr auto scalar(
const PA &p) {
22 return construct<Scalar<typename PA::resultType>>(p);
25template <
typename PA>
inline constexpr auto constant(
const PA &p) {
26 return construct<Constant<typename PA::resultType>>(p);
29template <
typename PA>
inline constexpr auto integer(
const PA &p) {
30 return construct<Integer<typename PA::resultType>>(p);
33template <
typename PA>
inline constexpr auto logical(
const PA &p) {
34 return construct<Logical<typename PA::resultType>>(p);
37template <
typename PA>
inline constexpr auto defaultChar(
const PA &p) {
38 return construct<DefaultChar<typename PA::resultType>>(p);
42constexpr auto charLiteralConstantWithoutKind{
43 "'"_ch >> CharLiteral<
'\''>{} ||
"\""_ch >> CharLiteral<
'"'>{}};
47constexpr auto scalarLogicalVariable{scalar(logical(variable))};
51constexpr auto scalarDefaultCharVariable{scalar(defaultChar(variable))};
55constexpr auto scalarIntVariable{scalar(integer(variable))};
59constexpr auto msgVariable{construct<MsgVariable>(scalarDefaultCharVariable)};
62constexpr auto logicalExpr{logical(indirect(expr))};
63constexpr auto scalarLogicalExpr{scalar(logicalExpr)};
66constexpr auto defaultCharExpr{defaultChar(indirect(expr))};
67constexpr auto scalarDefaultCharExpr{scalar(defaultCharExpr)};
70constexpr auto intExpr{integer(indirect(expr))};
71constexpr auto scalarIntExpr{scalar(intExpr)};
74constexpr auto constantExpr{constant(indirect(expr))};
75constexpr auto scalarExpr{scalar(indirect(expr))};
78constexpr auto scalarDefaultCharConstantExpr{scalar(defaultChar(constantExpr))};
81constexpr auto intConstantExpr{integer(constantExpr)};
82constexpr auto scalarIntConstantExpr{scalar(intConstantExpr)};
86constexpr auto boundExpr{scalarIntExpr};
89constexpr auto teamValue{scalar(indirect(expr))};
92constexpr auto doVariable{scalar(integer(name))};
96inline constexpr auto loopBounds(
decltype(scalarExpr) &p) {
97 return construct<LoopBounds<ScalarName, ScalarExpr>>(
98 scalar(name) /
"=", p /
",", p, maybe(
"," >> p));
100template <
typename PA>
inline constexpr auto loopBounds(
const PA &p) {
101 return construct<LoopBounds<DoVariable, typename PA::resultType>>(
102 doVariable /
"=", p /
",", p, maybe(
"," >> p));
Definition: check-expression.h:19