Статьи

На этой странице можно найти различные полезные (и не очень) статьи, которыми мне очень сильно хочется поделиться с общественностью.

Как создать линейную диаграмму на чистом Javascript и SVG
web development, javascript, svg

Линейная диаграмма – это один из самых наглядных и популярных способов отобразить изменение числовых значений с течением времени. Её часто используют для визуализации трендов, показателей роста, температуры, курса валют и любых других данных, где важна последовательность и динамика.

В этой статье вы узнаете, как с нуля реализовать линейную диаграмму на чистом JavaScript и SVG. Без сторонних библиотек, только нативный код и простая логика.

Парсим математические выражения на чистом Javascript. Часть 6: перевод из постфиксной формы в инфиксную
javascript, math expression parsing, infix form, rpn

В предыдущих частях мы построили полноценную систему разбора и вычисления математических выражений: реализовали токенизацию, синтаксический разбор с помощью трёх различных парсеров, поддержку унарных операторов, функций с переменным числом аргументов и проверку синтаксических ошибок. Всё это позволило получать корректные выражения в виде постфиксной записи (RPN) и эффективно их вычислять.

Однако постфиксная форма плохо подходит для отображения: её структура непрозрачна, а порядок выполнения операций неочевиден без подготовки. В этой части мы научимся преобразовывать выражение из RPN обратно в человекочитаемую инфиксную форму.

Парсим математические выражения на чистом Javascript. Часть 5: парсер Пратта
javascript, math expression parsing, Pratt parser

В предыдущей части мы реализовали парсер на основе рекурсивного спуска, шаг за шагом строя грамматику и соответствующие методы. Такой подход является выразительным и гибким, но всё же требует явного описания правил для каждого уровня приоритета операций, что быстро приводит к множеству почти одинаковых функций.

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

Парсим математические выражения на чистом Javascript. Часть 4: парсер рекурсивного спуска
javascript, math expression parsing, recursive descent parser

В предыдущих частях мы разобрали токенизацию математических выражений, научились вычислять выражения в обратной польской записи и построили алгоритм сортировочной станции для перевода в RPN.

Однако существует и другой, более выразительный способ синтаксического анализа – рекурсивный спуск. Этот метод лежит в основе множества настоящих парсеров, и его мощь в том, что он тесно связан с формальными грамматиками. В отличие от сортировочной станции, здесь правила синтаксиса можно выразить напрямую в виде вложенных функций, каждая из которых соответствует определённому уровню приоритета операций.

Парсим математические выражения на чистом Javascript. Часть 3: алгоритм сортировочной станции
javascript, math expression parsing, shunting yard

В предыдущей статье мы реализовали калькулятор выражений, записанных в обратной польской записи – структуру, идеально подходящую для быстрого и однозначного вычисления выражений. Однако остаётся вопрос: как получить RPN из привычной инфиксной записи (с операциями, скобками, переменными и функциями)?

Один из классических ответов на этот вопрос – алгоритм сортировочной станции (Shunting Yard Algorithm), предложенный Дейкстрой. Именно его мы сегодня и реализуем.

Парсим математические выражения на чистом Javascript. Часть 2: вычисление выражения в обратной польской записи
javascript, math expression parsing, reverse polish notation

В предыдущей части мы научились превращать строку с математическим выражением в последовательность токенов – чисел, операторов, скобок, функций и других элементов. Но токены сами по себе ничего не вычисляют. Чтобы получить результат, их нужно обработать, и сделать это можно по-разному.

В этой части мы познакомимся с обратной польской записью (Reverse Polish Notation, RPN) – универсальным представлением выражения, не требуещее скобок и знания приоритетов операций, и реализуем калькулятор, вычисляющий выражения, записанные в формате RPN.

Парсим математические выражения на чистом Javascript. Часть 1: токенизация
javascript, math expression parsing, tokenization

Во многих задачах – от калькуляторов до интерпретаторов и даже научных редакторов – возникает необходимость обрабатывать математические выражения. Казалось бы, можно просто использовать eval, но:

  • Это небезопасно: пользователь может выполнить произвольный код.
  • Это неудобно: невозможно перехватить ошибку синтаксиса, не зная её заранее.
  • Это негибко: нет возможности внедрить свои функции, переменные, константы и правила приоритета.

Вот почему мы реализуем собственный парсер выражений, полностью управляемый и расширяемый.

Как создать игру 2048 с нуля на чистом Javascript и Canvas
web development, javascript, canvas

Игра 2048 – это не просто культовая головоломка, которая покорила мир в 2014 году, но и отличный учебный проект для тех, кто хочет прокачать свои навыки в чистом JavaScript.

В этом пошаговом руководстве мы с нуля реализуем игру 2048 с использованием только JavaScript и Canvas API, без каких-либо сторонних библиотек или фреймворков.

Как создать сетку активности как на GitHub на чистом Javascript и CSS Grid
web development, javascript, css, css grid

Хотите добавить на сайт красивую сетку активности, как на GitHub? В этой статье мы пошагово создадим такую таблицу с помощью чистого JavaScript и CSS Grid, без библиотек и внешних зависимостей.