Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#Лучший гайд: https://habr.com/ru/post/329264/

dist: focal # используем Ubuntu 20.04 Focal Fossa
sudo: required # используем Virtual Machine (а не Docker container)

language: c # на практике разницы между специфичным для C++ окружением
# и, скажем, python -- никакой. Но пусть будет cpp.

os:
# будем прогонять CI и на Linux, и на Mac OS X...
- linux
#- osx

compiler:
# ... и с помощью GCC, и Clang
- gcc
#- clang

env:
# список переменных окружения, влияющих на матрицу сборки:
- BUILD_CONFIGURATION=Debug
- BUILD_CONFIGURATION=Release
#- TARGET_CPU=amd64

matrix:
exclude:
# вручную исключим ненужные элементы из матрицы сборки:
- os: osx
compiler: gcc

install:
# скрипт настройки среды и установки зависимостей:
- source testing/ci-install-$TRAVIS_OS_NAME.sh

script:

#accuracy:
- cppcheck --error-exitcode=1 --suppress=missingIncludeSystem --enable=style,performance,portability,warning project/

# скрипт сборки и тестирования проекта:
- mkdir build
- cd build
- cmake .. -DCMAKE_BUILD_TYPE=$BUILD_CONFIGURATION -DCMAKE_CXX_FLAGS="--coverage"
# -DTARGET_CPU=$TARGET_CPU
- cmake --build .

- ctest --output-on-failure
#- gcovr -r ..
- lcov --directory . --capture --output-file coverage.info
- lcov --remove coverage.info '/usr/*' "${HOME}"'/.cache/*' --output-file coverage.info
- lcov --list coverage.info
#- codecov
- curl -s https://codecov.io/bash > .codecov
- chmod +x .codecov
- ./.codecov

#safety:
- valgrind --error-exitcode=1 --tool=memcheck --leak-check=full ./program ../testing/logic/cases/17.txt

after_success:
# public:
- bash <(curl -s https://codecov.io/bash)


#private
#- bash <(curl -s https://codecov.io/bash) -t your-repository-upload-token
24 changes: 24 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.16)
project(hw1)
set(CMAKE_C_STANDARD 11)

set(CMAKE_C_FLAGS "-g -coverage -O0 -Wall -fprofile-arcs -ftest-coverage -fPIC")
set(CMAKE_CXX_FLAGS "-g -coverage -O0 -Wall -fprofile-arcs -ftest-coverage -fPIC")
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1)

include_directories(project/include/)
add_executable(program project/src/program.c project/src/hw-1.c)

enable_testing()
find_package(GTest REQUIRED)

include_directories(${GTEST_INCLUDE_DIRS})
message(${GTEST_LIBRARIES})
message(${GTEST_INCLUDE_DIRS})

add_executable(tests testing/tests.cpp)
target_link_libraries(tests ${GTEST_LIBRARIES} -lpthread)

add_test(program_and_functions_test ./tests)
add_definitions(-fprofile-arcs -ftest-coverage)
target_link_libraries(tests -fprofile-arcs)
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
# [Techno] CPP
Домашки Турчина Дениса
Домашки Дениса Турчина
АПО-13 Вар 74

# Вариант #74
Разработать программу, которая на вход принимает исходный код на языке C, находит в нём все комментарии (однострочные и многострочные) и для каждого из них заполняет структуру, содержащую информацию о тексте комментария, его типе и о номерах строк, на которых он расположен. В результате должен получиться список таких структур, который нужно вывести на экран.
44 changes: 44 additions & 0 deletions project/include/hw-1.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// Created by denactive on 12.03.2021.
//
#ifndef PROJECT_HW_1_H
#define PROJECT_HW_1_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

#define BUFFER_SIZE 1024
#define SYNTAX_ERROR 1

enum {
single,
multiline
};

typedef struct {
char* beg;
char* end;
size_t line;
unsigned int type;
} comment;

int parse_comments(const char* str, size_t *line_cnt, comment **res, size_t *comments_amount);

char* execute_line_comment(const char *str, size_t *line_cnt, comment **res, size_t *comments_amount);
char* execute_multiline_comment(const char *str, size_t *line_cnt, comment **res, size_t *comments_amount);

int res_exp(comment **res, size_t *comments_amount);
int free_res(comment **res);
void print_res(const comment *res, size_t *comments_amount);
void print_comment(const comment* c);

char* console_input();
char* file_input(const char *filename, struct stat* stat_buf);

#endif //PROJECT_HW_1_H
Loading