Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 1. Базовый класс ParserBase
https://teletype.in/@pascalabcnet/Parse1
https://teletype.in/@pascalabcnet/Parse1
Teletype
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 1. Базовый класс ParserBase
Приступим к написанию синтаксического анализатора (парсера) простого языка программирования.
👍6🔥1
Интерфейсы
Интерфейс - это набор требований, которым должен удовлетворять класс. Этот набор требований задается в интерфейсе в виде заголовков методов.
Класс, реализующий интерфейс, должен реализовывать все его методы в секции public.
Интерфейсы позволяют объединять разнородные объекты в полиморфные списки.
#студентам
Интерфейс - это набор требований, которым должен удовлетворять класс. Этот набор требований задается в интерфейсе в виде заголовков методов.
Класс, реализующий интерфейс, должен реализовывать все его методы в секции public.
Интерфейсы позволяют объединять разнородные объекты в полиморфные списки.
#студентам
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 2. Реализуем конкретный язык Simple
В данной статье мы наконец реализуем парсер конкретного языка с циклами, условным оператором и оператором вывода.
https://teletype.in/@pascalabcnet/Parse2
В данной статье мы наконец реализуем парсер конкретного языка с циклами, условным оператором и оператором вывода.
https://teletype.in/@pascalabcnet/Parse2
Teletype
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 2. Реализуем конкретный язык Simple
Этот текст - продолжение публикации https://teletype.in/@pascalabcnet/Parse1, в которой описывался базовый класс парсера языка...
🔥4👍2
Дубль запуска основной программы
На скриншоте продемонстрирована важная техника - как запустить код основной программы повторно в этой же программе.
Для этого используется рефлексия. Соответствующие действия выполняются в подключаемом модуле RunUnit. Здесь в секции инициализации еще до запуска основной программы вызывается метод $Main основной программы и потом прорабатывает сама программа.
Данный прием активно используется при тестировании. В частности, подобную технику активно использует задачник PT4 и легковесный задачник LightPT.
На скриншоте продемонстрирована важная техника - как запустить код основной программы повторно в этой же программе.
Для этого используется рефлексия. Соответствующие действия выполняются в подключаемом модуле RunUnit. Здесь в секции инициализации еще до запуска основной программы вызывается метод $Main основной программы и потом прорабатывает сама программа.
Данный прием активно используется при тестировании. В частности, подобную технику активно использует задачник PT4 и легковесный задачник LightPT.
🔥3
Игра Быки и коровы
Перед вами - реализация игры Быки и Коровы. Один игрок загадывает четырехзначное число, в котором все цифры разные. Второй - отгадывает его, предлагая вариант ответа. Первый должен ответить, сколько в сказанном числе верных цифр не на своих местах (коров) и сколько верных на своих местах (быков).
Вот результат одного запуска программы:
Перед вами - реализация игры Быки и Коровы. Один игрок загадывает четырехзначное число, в котором все цифры разные. Второй - отгадывает его, предлагая вариант ответа. Первый должен ответить, сколько в сказанном числе верных цифр не на своих местах (коров) и сколько верных на своих местах (быков).
Вот результат одного запуска программы:
Загадано: 8170
1. Ход=1846 Коров: 2 Быков: 0 ОсталосьВариантов: 1155
2014 2018 2061 2064 2068 2081 2084 2104 2108 2134 2138 2154 2158 2160 2163 2165 2167 2169 2174 2178
2. Ход=6780 Коров: 2 Быков: 1 ОсталосьВариантов: 53
2687 2768 3687 3768 4087 4670 4708 5687 5768 6017 6028 6038 6058 6071 6074 6098 6107 6208 6278 6308
3. Ход=8765 Коров: 1 Быков: 1 ОсталосьВариантов: 8
4708 7160 7460 8170 8470 8620 8630 8690
4. Ход=8620 Коров: 0 Быков: 2 ОсталосьВариантов: 2
8170 8470
5. Ход=8170 Коров: 0 Быков: 4 ОсталосьВариантов: 1
8170
Решение = 8170 Ходов: 5
❤3👍3
Перед ЕГЭ
function F(a, limit, sm, pr: integer): integer;
begin
if (a = limit) and (sm <= 1) and (pr <=1) then
Result := 1
else if (a > limit) or(sm > 1) or (pr > 1) then
Result := 0
else
Result := F(a+1, limit, sm+1, 0) + F(a+2, limit, sm+1, 0) +
F(a*2, limit, 0, pr+1) + F(a*3, limit, 0, pr+1)
end;
begin
Print(F(1, 22, 0, 0));
end.
👍4❤1
И снова перед ЕГЭ
var count, cnt: array['A'..'Z'] of integer;
begin
Assign(input, '24.txt');
while not eof do
begin
var s := ReadlnString;
for var i := 2 to s.Length do
if s[i - 1] = 'A' then
cnt[s[i]] += 1;
var max := cnt.Max;
for var c := 'A' to 'Z' do
if cnt[c] = m then
count[c] += 1;
end;
Print(count.Max);
end.
👍1🥰1
19 июня - ЕГЭ по информатике
Сегодня 19 июня десятки тысяч школьников по всей России сдают ЕГЭ по информатике. Цель - получить как можно более высокий балл и поступить в ВУЗ своей мечты.
Для решения задач можно использовать самые разные языки, но многие школьники выбирают в качестве языка программирования именно PascalABC.NET - российскую систему программирования, разработанную для обучения современному программированию и вошедшую в репозитории российских операционных систем.
Именно грамотное использование PascalABC.NET позволяет написать компактный и понятный код, дает школьнику на ЕГЭ хорошие конкурентные преимущества, обеспечивает получение наивысших баллов и порой ставит в тупик присутствующих на экзамене "специалистов".
Дерзайте! Разработчики PascalABC.NET с вами в этот день!
Сегодня 19 июня десятки тысяч школьников по всей России сдают ЕГЭ по информатике. Цель - получить как можно более высокий балл и поступить в ВУЗ своей мечты.
Для решения задач можно использовать самые разные языки, но многие школьники выбирают в качестве языка программирования именно PascalABC.NET - российскую систему программирования, разработанную для обучения современному программированию и вошедшую в репозитории российских операционных систем.
Именно грамотное использование PascalABC.NET позволяет написать компактный и понятный код, дает школьнику на ЕГЭ хорошие конкурентные преимущества, обеспечивает получение наивысших баллов и порой ставит в тупик присутствующих на экзамене "специалистов".
Дерзайте! Разработчики PascalABC.NET с вами в этот день!
🔥7👍1
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 2. Абстрактное синтаксическое дерево (AST)
В данной статье мы описываем все узлы синтаксического дерева, используемые в нашем языке.
https://teletype.in/@pascalabcnet/Parse3
В данной статье мы описываем все узлы синтаксического дерева, используемые в нашем языке.
https://teletype.in/@pascalabcnet/Parse3
Teletype
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 2. Абстрактное синтаксическое дерево (AST)
Этот текст - продолжение публикации https://teletype.in/@pascalabcnet/Parse2, в которой описывался парсер простого языка...
Можно ли типизировать Питон?
Глубокая статья-перевод на Хабре о том, можно ли хоть как-то типизировать Питон и в результате получить ускорение?
Анализируются все известные решения и - делается вывод...
Спойлер - нельзя. Полностью нельзя будет никогда. Слишком много там наворотили динамичного. Так что Питон всегда так и останется медленным.
https://habr.com/ru/companies/piter/articles/743538/
Глубокая статья-перевод на Хабре о том, можно ли хоть как-то типизировать Питон и в результате получить ускорение?
Анализируются все известные решения и - делается вывод...
Спойлер - нельзя. Полностью нельзя будет никогда. Слишком много там наворотили динамичного. Так что Питон всегда так и останется медленным.
https://habr.com/ru/companies/piter/articles/743538/
Хабр
Как можно компилировать типизированный Python
Прошло уже целых 9 лет с тех пор, как состоялся документ PEP 484 , в котором сообществу Python были ниспосланы типы. Многих это сильно разозлило, и в широких массах этот ход осуждался ( 1 ). С тех пор...
❤2
ЕГЭ по информатике - реальное задание 27
В этом году на ЕГЭ по информатике - новее задание 27.
Кто решит?
Вот примерная формулировка:
Астрономическая станция ведёт наблюдение за излучением солнца. Показания записываются каждую минуту в течении N минут. Определяется тройка измерений, между которыми прошло не менее K минут. Найдите максимальную сумму показаний среди таких троек.
Входные данные
Даны два входных файла (A и B), каждый из которых в первой строке содержит число N - количество измерений, во второй строке K - минимальное количество минут между искомыми измерениями. В каждой из следующих N строк находится число: интенсивность излучения солнца.
В ответе укажите два числа: сначала значение искомой величины для файла A, затем - для файла B.
Типовой пример организации данных во входном файле
В этом году на ЕГЭ по информатике - новее задание 27.
Кто решит?
Вот примерная формулировка:
Астрономическая станция ведёт наблюдение за излучением солнца. Показания записываются каждую минуту в течении N минут. Определяется тройка измерений, между которыми прошло не менее K минут. Найдите максимальную сумму показаний среди таких троек.
Входные данные
Даны два входных файла (A и B), каждый из которых в первой строке содержит число N - количество измерений, во второй строке K - минимальное количество минут между искомыми измерениями. В каждой из следующих N строк находится число: интенсивность излучения солнца.
В ответе укажите два числа: сначала значение искомой величины для файла A, затем - для файла B.
Типовой пример организации данных во входном файле
7При таких исходных данных ответом будет 48 + 102 + 68 = 218
2
18
48
49
102
95
15
68
Черепашья графика на занимательных примерах
Валерий Рубанцев опубликовал новую замечательную книгу по Черепашьей графике в PascalABC.NET: https://disk.yandex.ru/i/2bIr-nEYGWLoLw
В ней - огромное количество примеров.
На скриншоте - один из них.
Валерий Рубанцев опубликовал новую замечательную книгу по Черепашьей графике в PascalABC.NET: https://disk.yandex.ru/i/2bIr-nEYGWLoLw
В ней - огромное количество примеров.
На скриншоте - один из них.
👍7
Пишем интерпретатор на PascalABC.NET. Интерпретатор по синтаксическому дереву
Наконец-то! Интерпретатор на 657 строк, по скорости равный Питону! Исходные коды - здесь.
https://teletype.in/@pascalabcnet/InterpretASTTree
Наконец-то! Интерпретатор на 657 строк, по скорости равный Питону! Исходные коды - здесь.
https://teletype.in/@pascalabcnet/InterpretASTTree
Teletype
Пишем интерпретатор на PascalABC.NET. Интерпретатор по синтаксическому дереву
Теперь перейдем к тому, ради чего мы пишем весь этот код - к написанию собственно интерпретатора.
❤3
Новая стандартная функция RandomReal
В PascalABC.NET появилась новая стандартная функция RandomReal(a,b,digits). Параметр digits определяет количество знаков после точки и по умолчанию равен 1.
В примере на скриншоте демонстрируется генерация 10 случайных вещественных с двумя знаками после десятичной точки
#новое
В PascalABC.NET появилась новая стандартная функция RandomReal(a,b,digits). Параметр digits определяет количество знаков после точки и по умолчанию равен 1.
В примере на скриншоте демонстрируется генерация 10 случайных вещественных с двумя знаками после десятичной точки
#новое
👍9❤3😁2
Вредные советы для C++ и не только
Публикуем великолепную коллекцию вредных советов от PVS Studio - как не надо писать на C++: https://pvs-studio.ru/ru/blog/posts/cpp/1053/
Половина советов - универсальные и не зависят от языка программирования.
Самые замечательные вредные советы:
🔹 Чем короче имя переменной, тем лучше
🔹 Если что-то не работает, то, скорее всего, глючит компилятор. Попробуйте поменять местами некоторые переменные и строки кода
🔹 Используйте как можно меньше фигурных скобок и переносов строк, старайтесь писать условные конструкции в одну строку. Так код будет быстрее компилироваться и занимать меньше места
🔹 Не пользуйтесь стандартной библиотекой языка. Что может быть интереснее, чем написать свои строки и списки с уникальным синтаксисом и семантикой?
🔹 Глобальные переменные очень удобны, т. к. к ним можно обращаться отовсюду.
🔹 Смело сравнивайте числа с плавающей точкой с помощью оператора ==. Раз есть такой оператор, значит им нужно пользоваться
🔹 Зачем инициализировать переменные, если там и так нули? Я вот недавно не инициализировал, и там ноль был. Всё работало.
🔹 Выравнивание и единый стиль не дают раскрыться вашей индивидуальности и креативности. Это притеснение свободы личности и самовыражения. Каждый должен оформлять код так, как ему нравится.
🔹 Экономьте память. Используйте одну переменную для разных целей!
🔹 Массив на стеке — лучшее решение. И вообще, выделение памяти — зло. char c[256] хватит всем, а если не хватит, то потом поменяем на 512. В крайнем случае – на 1024.
🔹 Нет времени думать, копируйте код многократно!
🔹 Если программа работает, как вы ожидали, значит она правильная. И обсуждать здесь нечего, точка. Everything is fine
🔹 Проявите немного уважения к программистам прошлого – объявляйте все переменные в начале функций. Это традиция!
🔹 Прося помощь на форуме, делайте так, чтобы из тебя вытягивали информацию. Так всем будет интереснее
🔹 Настоящие программисты программируют только на C++
Публикуем великолепную коллекцию вредных советов от PVS Studio - как не надо писать на C++: https://pvs-studio.ru/ru/blog/posts/cpp/1053/
Половина советов - универсальные и не зависят от языка программирования.
Самые замечательные вредные советы:
🔹 Чем короче имя переменной, тем лучше
🔹 Если что-то не работает, то, скорее всего, глючит компилятор. Попробуйте поменять местами некоторые переменные и строки кода
🔹 Используйте как можно меньше фигурных скобок и переносов строк, старайтесь писать условные конструкции в одну строку. Так код будет быстрее компилироваться и занимать меньше места
🔹 Не пользуйтесь стандартной библиотекой языка. Что может быть интереснее, чем написать свои строки и списки с уникальным синтаксисом и семантикой?
🔹 Глобальные переменные очень удобны, т. к. к ним можно обращаться отовсюду.
🔹 Смело сравнивайте числа с плавающей точкой с помощью оператора ==. Раз есть такой оператор, значит им нужно пользоваться
🔹 Зачем инициализировать переменные, если там и так нули? Я вот недавно не инициализировал, и там ноль был. Всё работало.
🔹 Выравнивание и единый стиль не дают раскрыться вашей индивидуальности и креативности. Это притеснение свободы личности и самовыражения. Каждый должен оформлять код так, как ему нравится.
🔹 Экономьте память. Используйте одну переменную для разных целей!
🔹 Массив на стеке — лучшее решение. И вообще, выделение памяти — зло. char c[256] хватит всем, а если не хватит, то потом поменяем на 512. В крайнем случае – на 1024.
🔹 Нет времени думать, копируйте код многократно!
🔹 Если программа работает, как вы ожидали, значит она правильная. И обсуждать здесь нечего, точка. Everything is fine
🔹 Проявите немного уважения к программистам прошлого – объявляйте все переменные в начале функций. Это традиция!
🔹 Прося помощь на форуме, делайте так, чтобы из тебя вытягивали информацию. Так всем будет интереснее
🔹 Настоящие программисты программируют только на C++
PVS-Studio
60 антипаттернов для С++ программиста
Здесь вы найдёте 60 вредных советов для программистов и пояснение, почему они вредные. Всё будет одновременно в шутку и серьёзно. Как бы глупо ни смотрелся вредный совет, он не выдуман, а подсмотрен...
👍10🤪4❤1🔥1