You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
8.9 KiB
250 lines
8.9 KiB
// 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,
|
|
kElementsSubNode6,
|
|
kSTRINGSubNode7,
|
|
kNUMBERSubNode8,
|
|
kNUMBERSubNode9,
|
|
kINTEGERSubNode10,
|
|
kINTEGERSubNode11,
|
|
kINTEGERSubNode12,
|
|
kDIGITSSubNode13,
|
|
kEXPONENTSubNode14,
|
|
kEXPONENTSubNode15,
|
|
kWSPACESubNode16,
|
|
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 ElementsSubNode6;
|
|
class STRINGSubNode7;
|
|
class NUMBERSubNode8;
|
|
class NUMBERSubNode9;
|
|
class INTEGERSubNode10;
|
|
class INTEGERSubNode11;
|
|
class INTEGERSubNode12;
|
|
class DIGITSSubNode13;
|
|
class EXPONENTSubNode14;
|
|
class EXPONENTSubNode15;
|
|
class WSPACESubNode16;
|
|
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 = R"grammar([ \t\n\r])grammar";
|
|
inline constexpr absl::string_view kStrCharSet1 = R"grammar([1-9])grammar";
|
|
inline constexpr absl::string_view kStrCharSet2 = R"grammar([Ee])grammar";
|
|
inline constexpr absl::string_view kStrCharSet0 =
|
|
R"grammar([a-zA-Z0-9_])grammar";
|
|
|
|
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 TupleDomain<kElementsNode, ElementNode, ElementsSubNode5> {};
|
|
class ElementNode final : public TupleDomain<kElementNode, ValueNode> {};
|
|
class STRINGNode final
|
|
: public TupleDomain<kSTRINGNode, Literal4, STRINGSubNode7, Literal4> {};
|
|
class CHARACTERNode final : public TupleDomain<kCHARACTERNode, CharSet0> {};
|
|
class NUMBERNode final : public TupleDomain<kNUMBERNode, INTEGERNode,
|
|
NUMBERSubNode8, NUMBERSubNode9> {};
|
|
class INTEGERNode final
|
|
: public VariantDomain<kINTEGERNode, 0, DIGITNode, INTEGERSubNode10,
|
|
INTEGERSubNode11, INTEGERSubNode12> {};
|
|
class DIGITSNode final : public TupleDomain<kDIGITSNode, DIGITSSubNode13> {};
|
|
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, EXPONENTSubNode14,
|
|
ONETONINENode, EXPONENTSubNode15> {};
|
|
class SIGNNode final : public VariantDomain<kSIGNNode, 0, Literal7, Literal8> {
|
|
};
|
|
class WSPACENode final : public TupleDomain<kWSPACENode, WSPACESubNode16> {};
|
|
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 Vector<kElementsSubNode5, ElementsSubNode6> {};
|
|
class ElementsSubNode6 final
|
|
: public TupleDomain<kElementsSubNode6, Literal11, ElementNode> {};
|
|
class STRINGSubNode7 final : public Vector<kSTRINGSubNode7, CHARACTERNode> {};
|
|
class NUMBERSubNode8 final : public Optional<kNUMBERSubNode8, FRACTIONNode> {};
|
|
class NUMBERSubNode9 final : public Optional<kNUMBERSubNode9, EXPONENTNode> {};
|
|
class INTEGERSubNode10 final
|
|
: public TupleDomain<kINTEGERSubNode10, ONETONINENode, DIGITSNode> {};
|
|
class INTEGERSubNode11 final
|
|
: public TupleDomain<kINTEGERSubNode11, Literal8, DIGITNode> {};
|
|
class INTEGERSubNode12 final : public TupleDomain<kINTEGERSubNode12, Literal8,
|
|
ONETONINENode, DIGITSNode> {};
|
|
class DIGITSSubNode13 final
|
|
: public NonEmptyVector<kDIGITSSubNode13, DIGITNode> {};
|
|
class EXPONENTSubNode14 final : public Optional<kEXPONENTSubNode14, SIGNNode> {
|
|
};
|
|
class EXPONENTSubNode15 final : public Optional<kEXPONENTSubNode15, DIGITNode> {
|
|
};
|
|
class WSPACESubNode16 final
|
|
: public NonEmptyVector<kWSPACESubNode16, 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_
|
|
|