P4C
The P4 Compiler
Loading...
Searching...
No Matches
bmv2/common/parser.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 * Copyright 2013-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef BACKENDS_BMV2_COMMON_PARSER_H_
9#define BACKENDS_BMV2_COMMON_PARSER_H_
10
11#include "expression.h"
12#include "frontends/common/resolveReferences/referenceMap.h"
13#include "frontends/p4/typeMap.h"
14#include "helpers.h"
15#include "ir/ir.h"
16#include "lib/json.h"
17
18namespace P4::BMV2 {
19
20class JsonObjects;
21
22class ParserConverter : public Inspector {
24 cstring name;
25 P4::P4CoreLibrary &corelib;
26
27 protected:
28 void convertSimpleKey(const IR::Expression *keySet, big_int &value, big_int &mask) const;
29 unsigned combine(const IR::Expression *keySet, const IR::ListExpression *select, big_int &value,
30 big_int &mask, bool &is_vset, cstring &vset_name) const;
31 Util::IJson *stateName(IR::ID state);
32 Util::IJson *convertParserStatement(const IR::StatOrDecl *stat);
33 Util::IJson *convertSelectKey(const IR::SelectExpression *expr);
34 Util::IJson *convertPathExpression(const IR::PathExpression *expr);
35 Util::IJson *createDefaultTransition();
36 cstring jsonAssignment(const IR::Type *type);
37 std::vector<Util::IJson *> convertSelectExpression(const IR::SelectExpression *expr);
38 void addValueSets(const IR::P4Parser *parser);
39
40 public:
41 bool preorder(const IR::P4Parser *p) override;
42 explicit ParserConverter(ConversionContext *ctxt, cstring name = "parser"_cs)
43 : ctxt(ctxt), name(name), corelib(P4::P4CoreLibrary::instance()) {
44 setName("ParserConverter");
45 }
46};
47
48} // namespace P4::BMV2
49
50#endif /* BACKENDS_BMV2_COMMON_PARSER_H_ */
Definition JsonObjects.h:17
void convertSimpleKey(const IR::Expression *keySet, big_int &value, big_int &mask) const
Operates on a select keyset.
Definition bmv2/common/parser.cpp:323
Definition coreLibrary.h:103
Definition lib/json.h:41
Definition cstring.h:85
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition action.cpp:9
Definition bmv2/common/helpers.h:288
Definition id.h:28