diff --git a/README.md b/README.md
index 2cb863de..78d694c0 100644
--- a/README.md
+++ b/README.md
@@ -79,6 +79,9 @@
- [`CSV Parsing`](modules/Language/CSV/Parsing.mpp) - Stream-based CSV line parser
- [`CLikeCompiler`](modules/Language/CLikeCompiler.mpp) - Compiler for C-inspired language
- [`GrammarParser`](modules/Language/GrammarParser.mpp) - A parser for defining and interpreting custom grammars, used for building language parsers
+- [`JSON Lexer`](modules/Language/JSON/JsonLexer.mpp) - Grammar-based JSON lexer with compile-time AST generation
+- [`JSON Mapping`](modules/Language/JSON/Mapping.mpp) - Type-safe bidirectional mapping between C++ structs and JSON with compile-time reflection
+- [`JSON Parsing`](modules/Language/JSON/Parsing.mpp) - High-performance typed JSON parser
- [`MetaCircularVirtualMachine`](modules/Language/MetaCircularVirtualMachine.mpp) - Homoiconic meta-circular virtual machine with extensible reflexivity
- [`MetaCircularParser`](modules/Language/MetaCircularParser.mpp) - Extension of `MetaCircularVirtualMachine` for building parsers with input stream reading capabilities
- [`ASTParser`](modules/Language/ASTParser.mpp) - AST parser (work in progress
)
diff --git a/modules/Language/JSON/JsonLexer.mpp b/modules/Language/JSON/JsonLexer.mpp
index c72e394f..f0659819 100644
--- a/modules/Language/JSON/JsonLexer.mpp
+++ b/modules/Language/JSON/JsonLexer.mpp
@@ -1,4 +1,4 @@
-export module CppUtils.Language.Json;
+export module CppUtils.Language.JSON.JsonLexer;
import std;
import CppUtils.Type;
@@ -6,7 +6,7 @@ import CppUtils.String;
import CppUtils.Container.Tree;
import CppUtils.Language.Lexer;
-export namespace CppUtils::Language::Json
+export namespace CppUtils::Language::JSON
{
class JsonLexer final
{
@@ -51,7 +51,7 @@ export namespace CppUtils::Language::Json
Lexer::GrammarLexer m_grammarLexer;
};
- [[nodiscard]] inline auto parse(std::string_view src) -> Container::Tree::VariantNode
+ [[nodiscard]] inline auto parseTree(std::string_view src) -> Container::Tree::VariantNode
{
static const auto jsonLexer = JsonLexer{};
return jsonLexer.parse(src);
@@ -59,9 +59,9 @@ export namespace CppUtils::Language::Json
namespace Literals
{
- [[nodiscard]] inline auto operator""_json(const char* cstring, std::size_t) -> Container::Tree::VariantNode
+ [[nodiscard]] inline auto operator""_json_tree(const char* cstring, std::size_t) -> Container::Tree::VariantNode
{
- return parse(cstring);
+ return parseTree(cstring);
}
}
}
diff --git a/modules/Language/Language.mpp b/modules/Language/Language.mpp
index 8cf85925..c9291bfc 100644
--- a/modules/Language/Language.mpp
+++ b/modules/Language/Language.mpp
@@ -8,6 +8,7 @@ export import CppUtils.Language.MetaCircularVirtualMachine;
export import CppUtils.Language.MetaCircularParser;
export import CppUtils.Language.CSV.Mapping;
export import CppUtils.Language.CSV.Parsing;
+export import CppUtils.Language.JSON.JsonLexer;
export import CppUtils.Language.JSON.Mapping;
export import CppUtils.Language.JSON.Parsing;
export import CppUtils.Language.Lexer;
@@ -17,7 +18,6 @@ export import CppUtils.Language.Xml.Tags;
export import CppUtils.Language.Xml.Flow;
export import CppUtils.Language.Xml.FlowRunner;
export import CppUtils.Language.Ini;
-export import CppUtils.Language.Json;
export import CppUtils.Language.Parameters;
export import CppUtils.Language.Markdown;
export import CppUtils.Language.Parser.AstParser;
diff --git a/tests/Language/INI/IniLexer.mpp b/tests/Language/INI/IniLexer.mpp
index 0570f7d0..fccdfa1a 100644
--- a/tests/Language/INI/IniLexer.mpp
+++ b/tests/Language/INI/IniLexer.mpp
@@ -7,10 +7,10 @@ namespace CppUtils::UnitTest::Language::Ini::IniLexer
{
using namespace CppUtils::String::Literals;
- auto _ = TestSuite{"Language/Ini/IniLexer", {"Language/Json/JsonLexer"}, [](TestSuite& suite) {
+ auto _ = TestSuite{"Language/Ini/IniLexer", {"Language/JSON/JsonLexer"}, [](TestSuite& suite) {
using namespace std::literals;
using namespace CppUtils::Language::Ini::Literals;
- using namespace CppUtils::Language::Json::Literals;
+ using namespace CppUtils::Language::JSON::Literals;
suite.addTest("Minimalist", [&] {
const auto iniTree = R"(
@@ -27,7 +27,7 @@ namespace CppUtils::UnitTest::Language::Ini::IniLexer
}
}
}
- )"_json;
+ )"_json_tree;
suite.expectEqual(iniTree, jsonTree);
});
@@ -47,7 +47,7 @@ namespace CppUtils::UnitTest::Language::Ini::IniLexer
}
}
}
- )"_json;
+ )"_json_tree;
suite.expectEqual(iniTree, jsonTree);
});
@@ -69,7 +69,7 @@ namespace CppUtils::UnitTest::Language::Ini::IniLexer
}
}
}
- )"_json;
+ )"_json_tree;
suite.expectEqual(iniTree, jsonTree);
});
@@ -108,7 +108,7 @@ namespace CppUtils::UnitTest::Language::Ini::IniLexer
}
}
}
- )"_json;
+ )"_json_tree;
suite.expectEqual(std::ranges::size(iniTree.nodes), 3uz);
suite.expectEqual(iniTree.nodes.at(0), jsonTree.nodes.at(0));
diff --git a/tests/Language/JSON/JsonLexer.mpp b/tests/Language/JSON/JsonLexer.mpp
index b7a22ae0..c508f622 100644
--- a/tests/Language/JSON/JsonLexer.mpp
+++ b/tests/Language/JSON/JsonLexer.mpp
@@ -1,20 +1,20 @@
-export module CppUtils.UnitTests.Language.Json.JsonLexer;
+export module CppUtils.UnitTests.Language.JSON.JsonLexer;
import std;
import CppUtils;
-namespace CppUtils::UnitTest::Language::Json::JsonLexer
+namespace CppUtils::UnitTest::Language::JSON::JsonLexer
{
using namespace CppUtils::String::Literals;
- auto _ = TestSuite{"Language/Json/JsonLexer", {}, [](TestSuite& suite) {
+ auto _ = TestSuite{"Language/JSON/JsonLexer", {}, [](TestSuite& suite) {
using namespace std::literals;
- using namespace CppUtils::Language::Json::Literals;
+ using namespace CppUtils::Language::JSON::Literals;
suite.addTest("Empty json", [&] {
const auto jsonTree = R"(
{}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expect(std::ranges::empty(jsonTree.nodes));
@@ -25,7 +25,7 @@ namespace CppUtils::UnitTest::Language::Json::JsonLexer
{
"key": null
}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expectEqual(std::ranges::size(jsonTree.nodes), 1uz);
@@ -40,7 +40,7 @@ namespace CppUtils::UnitTest::Language::Json::JsonLexer
"bool0": true,
"bool1": false
}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expectEqual(std::ranges::size(jsonTree.nodes), 2uz);
@@ -61,7 +61,7 @@ namespace CppUtils::UnitTest::Language::Json::JsonLexer
"number1": -21,
"number2": 3.141592
}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expectEqual(std::ranges::size(jsonTree.nodes), 3uz);
@@ -84,7 +84,7 @@ namespace CppUtils::UnitTest::Language::Json::JsonLexer
{
"key": "hello"
}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expectEqual(std::ranges::size(jsonTree.nodes), 1uz);
@@ -99,7 +99,7 @@ namespace CppUtils::UnitTest::Language::Json::JsonLexer
{
"key": [1, "abc", true]
}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expectEqual(std::ranges::size(jsonTree.nodes), 1uz);
@@ -124,7 +124,7 @@ namespace CppUtils::UnitTest::Language::Json::JsonLexer
"number1": 1
}
}
- )"_json;
+ )"_json_tree;
CppUtils::Log::TreeNodeLogger::log(jsonTree);
suite.expectEqual(std::ranges::size(jsonTree.nodes), 1uz);
diff --git a/tests/Language/JSON/Mapping.mpp b/tests/Language/JSON/Mapping.mpp
index ce321d55..4a4a0009 100644
--- a/tests/Language/JSON/Mapping.mpp
+++ b/tests/Language/JSON/Mapping.mpp
@@ -48,7 +48,7 @@ namespace CppUtils::UnitTest::Language::JSON::Mapping
using FunctionMapping = Type::Mapping<>;
};
- auto _ = TestSuite{"Language/JSON/Mapping", {"Logger", "Language/Json/JsonLexer", "Language/JSON/Parsing"}, [](TestSuite& suite) {
+ auto _ = TestSuite{"Language/JSON/Mapping", {"Logger", "Language/JSON/JsonLexer", "Language/JSON/Parsing"}, [](TestSuite& suite) {
using namespace CppUtils::Language::JSON::Literals;
using Logger = TestSuite::Logger;
diff --git a/tests/Language/JSON/Parsing.mpp b/tests/Language/JSON/Parsing.mpp
index 94d1e606..1ed2a5bb 100644
--- a/tests/Language/JSON/Parsing.mpp
+++ b/tests/Language/JSON/Parsing.mpp
@@ -5,7 +5,7 @@ import CppUtils;
namespace CppUtils::UnitTest::Language::JSON::Parsing
{
- auto _ = TestSuite{"Language/JSON/Parsing", {"Language/Json/JsonLexer"}, [](TestSuite& suite) {
+ auto _ = TestSuite{"Language/JSON/Parsing", {"Language/JSON/JsonLexer"}, [](TestSuite& suite) {
using namespace std::literals;
using namespace CppUtils::Language::JSON::Literals;
diff --git a/tests/UnitTests.mpp b/tests/UnitTests.mpp
index 5f874924..983f9b8a 100644
--- a/tests/UnitTests.mpp
+++ b/tests/UnitTests.mpp
@@ -45,7 +45,7 @@ export import CppUtils.UnitTests.Language.LabelsCompiler;
export import CppUtils.UnitTests.Language.MetaCircularVirtualMachine;
export import CppUtils.UnitTests.Language.MetaCircularParser;
export import CppUtils.UnitTests.Language.Ini.IniLexer;
-export import CppUtils.UnitTests.Language.Json.JsonLexer;
+export import CppUtils.UnitTests.Language.JSON.JsonLexer;
export import CppUtils.UnitTests.Language.Parameters.ParametersLexer;
export import CppUtils.UnitTests.Language.Lexer.Grammar.LowLevelGrammar;
export import CppUtils.UnitTests.Language.Lexer.Grammar.HighLevelGrammar;