Как разобрать выражения вида 25 + 8 / 4 + 5 * (127 + 9)?
Пишем формальную грамматику для арифметических выражений с поддержкой приоритета операций, использую нотацию Бэкуса-Наура с использованием библиотеки LALRPOP.
Получаем сгенерированный автомат с магазинной памятью для разбора этой контекстно-свободной грамматики на языке RUST! Проверяем парсер и получаем абстрактное синтаксическое дерево (AST), по которому вычисляем значение.
Визуализация в следующем видео!
Предыдущее видео: [ Ссылка ]
Исходный код: [ Ссылка ]
Документация по LALRPOP: [ Ссылка ]
Видео про красно-черное дерево: [ Ссылка ]
#rust #grammar
Кодим на Rust: грамматика для калькулятора
Теги
формальная грамматикаИерархия Хомскогограмматиканеограниченные грамматикиконтекстно зависимые грамматикиконтекстно-свободныеконтекстно-свободные грамматикиБэкуса — НаураФорма Бэкуса — НаураПарсерабстрактное синтаксическое деревокомпиляторвведение в компиляторытерминальный символнетерминальный символправила выводаНоам ХомскийФормальные языкиСинтаксисlalrpoprustrust langкодингкодпрограммированиеноам хомскийарфиметические выраженияAST