loom

Форк
0
112 строк · 4.0 Кб
1
/*
2
MIT License
3

4
Copyright (c) 2021 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
5

6
https://bmstu.codes/lsx/simodo
7
*/
8

9
/*! \file Утилита тестирования средств работы с JSON библиотеки SIMODO core. Проект SIMODO.
10
*/
11

12
#include "simodo/variable/json/Serialization.h"
13
#include "simodo/variable/json/parser/JsonRdp.h"
14
#include "simodo/variable/json/parser/Json5Rdp.h"
15
#include "simodo/variable/json/parser/JsonLspBuilder.h"
16
#include "simodo/inout/reporter/ConsoleReporter.h"
17
#include "simodo/inout/convert/functions.h"
18

19
#include <iostream>
20

21
using namespace simodo::inout;
22
using namespace simodo::variable;
23

24
namespace
25
{
26
    int jsonize (Parser_interface & parser, const std::vector<Token> & const_variable_set, const std::vector<std::pair<Token,Token>> & group_set)
27
    {
28
        bool ok = parser.parse();
29

30
        if (ok) {
31
            std::cout << "Константы и переменные:" << std::endl;
32
            for(const Token & t : const_variable_set)
33
                std::cout << "\t\"" << toU8(t.lexeme()) << "\"\t" 
34
                          << getLexemeTypeName(t.type())
35
                          << ", [" 
36
                          << t.location().range().start().line() << ", " << t.location().range().start().character() 
37
                          << "]" << std::endl;
38
            std::cout << "Структура:" << std::endl;
39
            for(const auto & [open_brace_token,close_brace_token] : group_set)
40
                std::cout << "\t" << toU8(open_brace_token.lexeme()) << " ["
41
                          << open_brace_token.location().range().start().line() << ", " << open_brace_token.location().range().start().character()
42
                          << "], [" 
43
                          << close_brace_token.location().range().start().line() << ", " << close_brace_token.location().range().start().character()
44
                          << "] " << toU8(close_brace_token.lexeme()) << std::endl;
45
        }
46

47
        return ok ? 0 : 1;
48
    }
49
}
50

51
int main(int argc, char *argv[])
52
{
53
    std::vector<std::string> arguments(argv + 1, argv + argc);
54

55
    std::string	file_name = "";
56
    bool	    error     = false;
57
    bool	    help      = false;
58

59
    for(size_t i=0; i < arguments.size(); ++i)
60
    {
61
        const std::string & arg = arguments[i];
62

63
        if (arg[0] == '-')
64
        {
65
            if (arg == "--help" || arg == "-h")
66
                help = true;
67
            else
68
                error = true;
69
        }
70
        else if (file_name.empty())
71
            file_name = arg;
72
        else
73
            error = true;
74
    }
75

76
    if (!help && file_name.empty())
77
        error = true;
78

79
    if (error)
80
    {
81
        std::cout << "Ошибка в параметрах запуска" << std::endl;
82
        help = true;
83
    }
84

85
    if (help)
86
        std::cout   << "Утилита тестирования средств работы с JSON. Проект SIMODO." << std::endl
87
                    << "Формат запуска:" << std::endl
88
                    << "    <имя утилиты> [<параметры>] <файл>" << std::endl
89
                    << "Параметры:" << std::endl
90
                    << "    -h | --help - отображение подсказки по запуску программы" << std::endl
91
                    ;
92

93
    if (error)
94
        return 1;
95

96
    if (file_name.empty())
97
        return 0;
98

99
    ConsoleReporter                     reporter;
100
    std::vector<Token>                  const_variable_set;
101
    std::vector<std::pair<Token,Token>> group_set;
102
    JsonLspBuilder                      builder(const_variable_set, group_set);
103
    Value                               value;
104
    std::unique_ptr<Parser_interface>   parser;
105

106
    if (file_name[file_name.size()-1] == '5')
107
        parser = std::make_unique<Json5Rdp>(reporter, builder, file_name, value);
108
    else
109
        parser = std::make_unique<JsonRdp>(reporter, builder, file_name, value);
110

111
    return jsonize(*parser, const_variable_set, group_set);
112
}
113

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.