Skip to content

vilfilll/cpp-spreadsheet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

C++ Spreadsheet Engine

Консольный движок электронной таблицы на C++17 с поддержкой формул, зависимостей между ячейками, кеширования вычислений и защитой от циклических ссылок.

Проект реализует ключевые механизмы, используемые в spreadsheet-приложениях: обработку формул, построение графа зависимостей, инвалидацию кеша и обработку ошибок вычислений.

Возможности

Работа с ячейками

  • хранение текстовых и вычисляемых значений;

  • поддержка адресации (A1, B2, ...);

  • вывод таблицы как:

    • исходного содержимого;
    • вычисленных значений.

Поддержка формул

  • арифметические операции:

    • +
    • -
    • *
    • /
  • скобки;

  • ссылки на другие ячейки;

  • нормализация выражений.

Граф зависимостей

  • отслеживание связей между ячейками;
  • автоматическая инвалидация кеша;
  • обнаружение циклических зависимостей;
  • выброс CircularDependencyException.

Обработка ошибок

Поддерживаются ошибки вычислений:

  • деление на ноль;
  • некорректные значения;
  • арифметические ошибки.

Стек

Язык

  • C++17

Инструменты

  • CMake
  • ANTLR4 (C++ runtime)

Тестирование

  • собственный lightweight test runner

Архитектура

Проект разделён на несколько компонентов:

Sheet
   ↓

Cell
   ↓

Formula
   ↓

AST

Основные модули:

  • sheet.*

    • контейнер ячеек;
    • API таблицы;
    • печать и валидация;
  • cell.*

    • логика ячеек;

    • кеширование значений;

    • зависимости:

      • depends_on
      • depended_by;
  • formula.*

  • FormulaAST.*

    • парсинг и вычисление формул;
  • common.h

    • общие типы и интерфейсы:

      • Position
      • Size
      • CellInterface
      • SheetInterface
  • main.cpp

    • тесты основных сценариев.

Сборка

Требования

  • CMake >= 3.8

  • Компилятор с поддержкой C++17:

    • MSVC
    • GCC
    • Clang
  • Java

  • ANTLR4 C++ runtime

  • antlr-4.12.0-complete.jar

Ожидаемая структура:

spreadsheet/
├── antlr4_runtime/
└── antlr-4.12.0-complete.jar

Build

cd spreadsheet

cmake -S . -B build

cmake --build build --config Release

Запуск

./build/Release/spreadsheet

Если все тесты проходят успешно, приложение завершается без ошибок.


Примеры поддерживаемых выражений

=1+2*3

=(A1+B2)/C3

=A1+A2+A1

'=A1+1

Описание:

  • =1+2*3 — арифметическое выражение;
  • =(A1+B2)/C3 — использование ссылок;
  • =A1+A2+A1 — повторные ссылки корректно учитываются;
  • '=A1+1 — экранирование формулы и обработка как текста.

Используемые концепции

  • AST (Abstract Syntax Tree);
  • граф зависимостей;
  • кеширование вычислений;
  • обработка исключений;
  • объектная модель;
  • парсинг выражений.

About

Электронная таблица

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors