blob: c7196d9c839990fe0d48f4d01a9aaec006e0e05b [file] [log] [blame]
// Copyright 2022 Google LLC
//
// 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 FUZZTEST_GRAMMARS_JSON_GRAMMAR_H_
#define FUZZTEST_GRAMMARS_JSON_GRAMMAR_H_
#include "./fuzztest/internal/domains/in_grammar_impl.h"
namespace fuzztest::internal::grammar::json {
enum JsonTypes {
kJsonNode,
kValueNode,
kObjectNode,
kMembersNode,
kMemberNode,
kArrayNode,
kElementsNode,
kElementNode,
kSTRINGNode,
kCHARACTERNode,
kNUMBERNode,
kINTEGERNode,
kDIGITSNode,
kDIGITNode,
kONETONINENode,
kFRACTIONNode,
kEXPONENTNode,
kSIGNNode,
kWSPACENode,
kObjectSubNode0,
kObjectSubNode1,
kMembersSubNode2,
kArraySubNode3,
kArraySubNode4,
kElementsSubNode5,
kSTRINGSubNode6,
kNUMBERSubNode7,
kNUMBERSubNode8,
kINTEGERSubNode9,
kINTEGERSubNode10,
kINTEGERSubNode11,
kDIGITSSubNode12,
kEXPONENTSubNode13,
kEXPONENTSubNode14,
kWSPACESubNode15,
kLiteral7,
kLiteral11,
kLiteral8,
kLiteral6,
kLiteral5,
kLiteral3,
kLiteral12,
kLiteral4,
kLiteral13,
kLiteral1,
kLiteral2,
kLiteral0,
kLiteral9,
kLiteral10,
kCharSet3,
kCharSet1,
kCharSet2,
kCharSet0,
};
class JsonNode;
class ValueNode;
class ObjectNode;
class MembersNode;
class MemberNode;
class ArrayNode;
class ElementsNode;
class ElementNode;
class STRINGNode;
class CHARACTERNode;
class NUMBERNode;
class INTEGERNode;
class DIGITSNode;
class DIGITNode;
class ONETONINENode;
class FRACTIONNode;
class EXPONENTNode;
class SIGNNode;
class WSPACENode;
class ObjectSubNode0;
class ObjectSubNode1;
class MembersSubNode2;
class ArraySubNode3;
class ArraySubNode4;
class ElementsSubNode5;
class STRINGSubNode6;
class NUMBERSubNode7;
class NUMBERSubNode8;
class INTEGERSubNode9;
class INTEGERSubNode10;
class INTEGERSubNode11;
class DIGITSSubNode12;
class EXPONENTSubNode13;
class EXPONENTSubNode14;
class WSPACESubNode15;
class Literal7;
class Literal11;
class Literal8;
class Literal6;
class Literal5;
class Literal3;
class Literal12;
class Literal4;
class Literal13;
class Literal1;
class Literal2;
class Literal0;
class Literal9;
class Literal10;
class CharSet3;
class CharSet1;
class CharSet2;
class CharSet0;
inline constexpr absl::string_view kStrLiteral7 = "+";
inline constexpr absl::string_view kStrLiteral11 = ",";
inline constexpr absl::string_view kStrLiteral8 = "-";
inline constexpr absl::string_view kStrLiteral6 = ".";
inline constexpr absl::string_view kStrLiteral5 = "0";
inline constexpr absl::string_view kStrLiteral3 = ":";
inline constexpr absl::string_view kStrLiteral12 = "[";
inline constexpr absl::string_view kStrLiteral4 = "\"";
inline constexpr absl::string_view kStrLiteral13 = "]";
inline constexpr absl::string_view kStrLiteral1 = "false";
inline constexpr absl::string_view kStrLiteral2 = "null";
inline constexpr absl::string_view kStrLiteral0 = "true";
inline constexpr absl::string_view kStrLiteral9 = "{";
inline constexpr absl::string_view kStrLiteral10 = "}";
inline constexpr absl::string_view kStrCharSet3 = "[ \\t\\n\\r]";
inline constexpr absl::string_view kStrCharSet1 = "[1-9]";
inline constexpr absl::string_view kStrCharSet2 = "[Ee]";
inline constexpr absl::string_view kStrCharSet0 = "[a-zA-Z0-9_]";
class JsonNode final : public TupleDomain<kJsonNode, ElementNode> {};
class ValueNode final
: public VariantDomain<kValueNode, 4, ObjectNode, ArrayNode, STRINGNode,
NUMBERNode, Literal0, Literal1, Literal2> {};
class ObjectNode final
: public VariantDomain<kObjectNode, 0, ObjectSubNode0, ObjectSubNode1> {};
class MembersNode final
: public VariantDomain<kMembersNode, 0, MemberNode, MembersSubNode2> {};
class MemberNode final
: public TupleDomain<kMemberNode, STRINGNode, Literal3, ElementNode> {};
class ArrayNode final
: public VariantDomain<kArrayNode, 0, ArraySubNode3, ArraySubNode4> {};
class ElementsNode final
: public VariantDomain<kElementsNode, 0, ElementNode, ElementsSubNode5> {};
class ElementNode final : public TupleDomain<kElementNode, ValueNode> {};
class STRINGNode final
: public TupleDomain<kSTRINGNode, Literal4, STRINGSubNode6, Literal4> {};
class CHARACTERNode final : public TupleDomain<kCHARACTERNode, CharSet0> {};
class NUMBERNode final : public TupleDomain<kNUMBERNode, INTEGERNode,
NUMBERSubNode7, NUMBERSubNode8> {};
class INTEGERNode final
: public VariantDomain<kINTEGERNode, 0, DIGITNode, INTEGERSubNode9,
INTEGERSubNode10, INTEGERSubNode11> {};
class DIGITSNode final : public TupleDomain<kDIGITSNode, DIGITSSubNode12> {};
class DIGITNode final
: public VariantDomain<kDIGITNode, 0, Literal5, ONETONINENode> {};
class ONETONINENode final : public TupleDomain<kONETONINENode, CharSet1> {};
class FRACTIONNode final
: public TupleDomain<kFRACTIONNode, Literal6, DIGITSNode> {};
class EXPONENTNode final
: public TupleDomain<kEXPONENTNode, CharSet2, EXPONENTSubNode13,
ONETONINENode, EXPONENTSubNode14> {};
class SIGNNode final : public VariantDomain<kSIGNNode, 0, Literal7, Literal8> {
};
class WSPACENode final : public TupleDomain<kWSPACENode, WSPACESubNode15> {};
class ObjectSubNode0 final
: public TupleDomain<kObjectSubNode0, Literal9, Literal10> {};
class ObjectSubNode1 final
: public TupleDomain<kObjectSubNode1, Literal9, MembersNode, Literal10> {};
class MembersSubNode2 final
: public TupleDomain<kMembersSubNode2, MemberNode, Literal11, MembersNode> {
};
class ArraySubNode3 final
: public TupleDomain<kArraySubNode3, Literal12, Literal13> {};
class ArraySubNode4 final
: public TupleDomain<kArraySubNode4, Literal12, ElementsNode, Literal13> {};
class ElementsSubNode5 final
: public TupleDomain<kElementsSubNode5, ElementNode, Literal11,
ElementsNode> {};
class STRINGSubNode6 final : public Vector<kSTRINGSubNode6, CHARACTERNode> {};
class NUMBERSubNode7 final : public Optional<kNUMBERSubNode7, FRACTIONNode> {};
class NUMBERSubNode8 final : public Optional<kNUMBERSubNode8, EXPONENTNode> {};
class INTEGERSubNode9 final
: public TupleDomain<kINTEGERSubNode9, ONETONINENode, DIGITSNode> {};
class INTEGERSubNode10 final
: public TupleDomain<kINTEGERSubNode10, Literal8, DIGITNode> {};
class INTEGERSubNode11 final : public TupleDomain<kINTEGERSubNode11, Literal8,
ONETONINENode, DIGITSNode> {};
class DIGITSSubNode12 final
: public NonEmptyVector<kDIGITSSubNode12, DIGITNode> {};
class EXPONENTSubNode13 final : public Optional<kEXPONENTSubNode13, SIGNNode> {
};
class EXPONENTSubNode14 final : public Optional<kEXPONENTSubNode14, DIGITNode> {
};
class WSPACESubNode15 final
: public NonEmptyVector<kWSPACESubNode15, CharSet3> {};
class Literal7 final : public StringLiteralDomain<kLiteral7, kStrLiteral7> {};
class Literal11 final : public StringLiteralDomain<kLiteral11, kStrLiteral11> {
};
class Literal8 final : public StringLiteralDomain<kLiteral8, kStrLiteral8> {};
class Literal6 final : public StringLiteralDomain<kLiteral6, kStrLiteral6> {};
class Literal5 final : public StringLiteralDomain<kLiteral5, kStrLiteral5> {};
class Literal3 final : public StringLiteralDomain<kLiteral3, kStrLiteral3> {};
class Literal12 final : public StringLiteralDomain<kLiteral12, kStrLiteral12> {
};
class Literal4 final : public StringLiteralDomain<kLiteral4, kStrLiteral4> {};
class Literal13 final : public StringLiteralDomain<kLiteral13, kStrLiteral13> {
};
class Literal1 final : public StringLiteralDomain<kLiteral1, kStrLiteral1> {};
class Literal2 final : public StringLiteralDomain<kLiteral2, kStrLiteral2> {};
class Literal0 final : public StringLiteralDomain<kLiteral0, kStrLiteral0> {};
class Literal9 final : public StringLiteralDomain<kLiteral9, kStrLiteral9> {};
class Literal10 final : public StringLiteralDomain<kLiteral10, kStrLiteral10> {
};
class CharSet3 final : public RegexLiteralDomain<kCharSet3, kStrCharSet3> {};
class CharSet1 final : public RegexLiteralDomain<kCharSet1, kStrCharSet1> {};
class CharSet2 final : public RegexLiteralDomain<kCharSet2, kStrCharSet2> {};
class CharSet0 final : public RegexLiteralDomain<kCharSet0, kStrCharSet0> {};
} // namespace fuzztest::internal::grammar::json
namespace fuzztest::internal_no_adl {
inline auto InJsonGrammar() {
return internal::grammar::InGrammarImpl<internal::grammar::json::JsonNode>();
}
} // namespace fuzztest::internal_no_adl
#endif // FUZZTEST_GRAMMARS_JSON_GRAMMAR_H_