Иван Кочуркин. Теория и практика парсинга формальных языковMskDotNet CommunityВ докладе рассказывается об инструментах и практиках парсинга формальных языков: как исходного кода, так и собственных предметно-ориентированных (DSL). О том, какие бывают парсеры и проблемы при их использовании. Доклад повествует как о базовых вещах: о токенах, деревьях разбора, абстрактных синтаксических деревьях (AST), так и о продвинутых: о методах обработки препроцессорных директив и восстановления от ошибок, о парсинге островных, нечувствительных к регистру языков и фрагментов кода. Помимо парсинга в докладе затрагивается тема обработки древовидных структур. Материал доклада основан на практических задачах и акцентирован на технологиях ANTLR и Roslyn.
Правила статического анализа кода для диагностики потенциально опасных констр...Sergey VasilyevВ статье сформулированы правила диагностики потенциально опасных синтаксических конструкций в исходном коде программ на языке Си++. Описаны принципы построения статического анализатора исходного кода, реализующего проверку указанных правил.
Теория языков программирования некоторые слайды к лекциямSergey StaroletovТеория языков программирования (немного об интерпретаторах, триадах, оптимизации, парсерах и прочее)
Compilers construction some lectures of whole course, it covers some methods on interpreters, optimisations, antlr, dsl (introduction)
64-битная версия LokiTatyanazaxarovaСтатья представляет собой отчет о проверки библиотеки Loki на совместимость с 64-битными системами с помощью анализатора кода Viva64 компании ООО "СиПроВер". Содержатся рекомендации пользователям библиотеки. Статья будет полезна также пользователям других библиотек, построенных на шаблонах, так как раскрывает особенности анализа подобных библиотек.
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_byПрактика разработки конкретного приложения может приводить к постановке задачи, которая, в зрелом размышлении, оказывается достаточно общей, чтобы вычленить её в абстракцию, потенциально полезную для множества различных приложений. Приведение решения к виду, пригодному для многократного применения, в отличие от решения, отвечающего нуждам конкретного приложения, требует дополнительных мыслительных усилий по выделению вариативных аспектов задачи, и по их моделированию средствами языка. В докладе представлен опыт реализации трёх абстракций, объединенных общей темой — буферизацией данных при многопоточной обработке. Показан ход мысли от анализа задачи до реализации средствами языка C++17.
Java - основы языкаЛеонид СтавилаКлючевые слова, типы, переменные операторы, команды, массивы. По-сути, готовился материал для собеседования, и для закрепления результата была создана данная презентация. Имеется более развёрнутый документ.
Здоровая критика, дополнения и замечания приветствуются.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDAРассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDAОсновы объектно-ориентированного программирования на языке C#. Часть 1. Введение в программирование.
Рассматривается базовые понятие алгоритмов, блок-схем, объектно-ориентированного программирования на базе платформы .NET Framework.
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_byПрактика разработки конкретного приложения может приводить к постановке задачи, которая, в зрелом размышлении, оказывается достаточно общей, чтобы вычленить её в абстракцию, потенциально полезную для множества различных приложений. Приведение решения к виду, пригодному для многократного применения, в отличие от решения, отвечающего нуждам конкретного приложения, требует дополнительных мыслительных усилий по выделению вариативных аспектов задачи, и по их моделированию средствами языка. В докладе представлен опыт реализации трёх абстракций, объединенных общей темой — буферизацией данных при многопоточной обработке. Показан ход мысли от анализа задачи до реализации средствами языка C++17.
Java - основы языкаЛеонид СтавилаКлючевые слова, типы, переменные операторы, команды, массивы. По-сути, готовился материал для собеседования, и для закрепления результата была создана данная презентация. Имеется более развёрнутый документ.
Здоровая критика, дополнения и замечания приветствуются.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDAРассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDAОсновы объектно-ориентированного программирования на языке C#. Часть 1. Введение в программирование.
Рассматривается базовые понятие алгоритмов, блок-схем, объектно-ориентированного программирования на базе платформы .NET Framework.
HISTORIA DE LA INFORMÁTICAaidajuradoEl documento resume la historia de la informática desde los primeros cálculos realizados con la Àbac en el 3000 a.C. hasta el desarrollo de los primeros microprocesadores y computadoras personales en las décadas de 1970 y 1980, mencionando invenciones clave como la máquina diferencial de Charles Babbage en 1832, la máquina ENIAC en 1946, el desarrollo de los transistores en 1947, y el lanzamiento del IBM PC y el Apple Macintosh en 1981 y 1984 respectivamente.
Disclosure - Voorstellen voor meer transparantie over herkomst van geleverde ...Katrien VerwimpThe VREG workshop on Disclosure on 26/2/2015 welcomed all stakeholders to participate in the debate on the future direction of Electricity disclosure in Flanders. Thanks to all participants for their input to the debate!
Familia simpsonPAMODIJULa familia Simpson está compuesta por Homero, Marge y sus hijos Bart, Lisa y Maggie, así como su mascota perro. Los roles dentro de la familia incluyen a Homero como el padre, Marge como la madre, Bart como el hijo mayor, Lisa como la hija mayor y Maggie como la hija menor.
Disclosure in Flanders - Groencheck Katrien VerwimpThis document discusses electricity disclosure regulations in Flanders, Belgium. It summarizes:
1. Flanders requires electricity suppliers to disclose the origin of the electricity supplied each year, including amounts from renewable energy sources (RES-E) and combined heat and power (CHP), proven by guarantees of origin (GOs). Most electricity comes from imports of GOs, raising Flanders' RES-E consumption.
2. The "Greencheck" system allows individual customers to verify the percentage of their electricity that came from RES-E sources, by having suppliers cancel GOs monthly based on customer consumption data from grid operators.
3. There is interest in expanding the Greencheck to provide more information on the country
Presentation of MEGACERT and AVS Logistik group of companiesNatalia IsachenkoThe presentation contains brief info on MEGACERT and AVS Logistik group of companies as well as on services we provide for those who enters market of Customs Union, and especially Russian market
Confidentiality manager training mha 690nikki1919This document discusses patient privacy and security concerns in healthcare. The Health Insurance Portability and Accountability Act (HIPAA) was designed to protect patient privacy and the confidentiality of medical records. However, maintaining confidentiality is difficult due to increased risks from advancing health information technology. The document also describes a case where staff at UCLA hospital breached security policies and did not follow HIPAA guidelines, damaging the credibility of the organization. It provides recommendations for healthcare organizations to ensure compliance with privacy and security protocols such as educating staff, implementing audits, and enforcing disciplinary actions for violations.
Moss ppsdmoss223This document discusses assistive technologies that can help students with disabilities access academic materials. It provides examples of technologies that aid students with hearing, visual, cognitive, and mobility challenges, such as C-Print for printed text of speech, FM systems using radio transmission, and Braille keyboards. The document also notes that over 6 million children receive special needs services in the US, but 1/3 of schools report insufficient services, and assistive technologies can help ensure equal education experiences for all students.
8 logika predikatYulinda NurhafinaDokumen tersebut membahas tentang logika predikat, meliputi latar belakang, simbol, kuantor, dan contoh-contoh pernyataan logika predikat dalam 3 kalimat atau kurang.
Построение компилятора на базе LLVM — Павел СычевYandexМы поговорим про компиляторы и их архитектуру. Обсудим, что же такое LLVM и зачем он нам нужен. Также рассмотрим, как написать компилятор простого языка программирования на LLVM.
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharpНаша команда в DevExpress недавно выпустила Preview версию нового продукта, RTF web-редактора – ASPxRichEdit.
Продукт требует высокой отзывчивости на действия пользователя и максимальной производительности. Поэтому клиент получился «толстым» в отличие от «тонких клиентов» большинства бизнес-приложений.
В составе продукта два полнофункциональных компонента - клиентский и серверный текстовые процессоры. Оба компонента работают независимо друг от друга. Клиентская часть создавалась как оптимизированная версия серверного компонента, переписанного с .NET на TypeScript.
Клиентская часть не уступает в сложности серверной. Кроме того, возникают дополнительные проблемы синхронизации состояний моделей на клиенте и сервере и глубокого тестирования клиент-серверного взаимодействия.
В этом докладе вы узнаете, как мы разрабатывали этот продукт, какие проблемы встретили и какие методики тестирования использовали.
Статический анализ кода для верификации 64-битных приложенийTatyanazaxarovaВ результате появления на рынке персональных компьютеров 64-битных процессоров, перед разработчиками программ возникает задача переноса старых 32-битных приложений на новую платформу. После такого переноса кода приложение может вести себя некорректно. В статье рассматривается вопрос разработки и применения статического анализатора кода для проверки правильности таких приложений. Приводятся проблемы, возникающие в приложениях после перекомпиляции для 64-битных систем, а также правила, по которым выполняется проверка кода.
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis TsvettsihПрезентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarovaЗадача знакомства программистов с областью разработки параллельных приложений становится все актуальней. Данная статья является кратким введением в создание многопоточных приложений, основанных на технологии OpenMP. Описаны подходы к отладке и оптимизации параллельных приложений.
Dynamic Language RuntimeGetDev.NETВидео и материалы со встречи:
http://getdev.net/Event/dynamic-language-runtime
В докладе рассмотрим скриптовые языки на платформе DLR, способы автоматизации рутинной работы с их помощью, а также интегрирование в конечное приложение.
3. План лекции:
Соглашения по оформлению программного кода
Win API и типы данных
Разработка DLL в Lazarus
Статическое связывание DLL
Динамическое связывание DLL
4. Соглашения по идентификаторам. Подбор
идентификаторов
Все идентификаторы должны выбираться из соображений
читаемости и максимальной семантической
нагрузки.
Плохо Хорошо
const UU = 0.0001;
var Kk : Integer;
Zz : String;
const
Eps = 0.0001; { точность }
var
Sum : Integer;{ сумма }
Message: String; { сообщение }
5. Соглашения по идентификаторам. Подбор
идентификаторов
Идентификаторы рекомендуется подбирать из слов
английского языка.
Плохо Хорошо
procedure Zvuk(Chast,
Dlit: Word);
procedure Beep(Hertz, MSec:
Word);
6. Соглашения по идентификаторам. Написание
идентификаторов
Зарезервированные слова языка Free Pascal писать только
маленькими буквами:
type, var, const; procedure, function; begin, end; if,
then, else; repeat, until; case; while; and, not, or; unit,
uses, interface, implementation.
В любых идентификаторах каждое слово, входящее в
идентификатор, писать, начиная с большой
буквы, остальные буквы -- маленькие. Не использовать
символ подчеркивания "_".
var
NextX, LastX: Real;
BeepOnError: Boolean;
7. Соглашения по идентификаторам. Написание
идентификаторов
Идентификаторы, состоящие из одной буквы, писать
большой буквой, если они
не являются счетчиками циклов.
A := A + B;
B := A - B;
A := A - B;
{ удалить звено c номером I из списка L }
procedure DeleteNode(var L: List; I: Word);
for i := 1 to N do
for j := 1 to N do
A[i, j] := (i + j) / 2;
8. Структура программы
Пролог, директива подключения внешних модулей, блоки
объявления и основной блок программы начинаются на одном
уровне по вертикали, то есть первые символы ключевых слов
program, uses, type, const, var и begin/end основного блока
должны располагаться друг под другом.
program ИмяПрограммы;
uses
{ Перечисление подключаемых модулей здесь }
type
{ Типы объявляются здесь }
const
{ Константы объявляются здесь }
var
{ Переменные объявляются здесь }
begin
{ Операторы программы здесь }
end.
9. Объявление переменных
В одной синтаксической конструкции объявления
переменной нужно объявлять одну переменную.
Плохо Хорошо
var
a, b: Integer;
var
a: Integer;
b: Integer;
10. Соглашения по читаемости программ
"Лесенка" должна отражать структурную вложенность
языковых конструкций. Рекомендуется отступ не менее
2-х и не более 8-и пробелов. Принятого отступа нужно
придерживаться во всем тексте программы.
11. Правила написания
конструкции if then
if <условие> then
begin
<операторы>
end;
if <условие> then <оператор>;
if <условие> then
<оператор>;
if <условие> then
begin
<операторы>
end
else
begin
<операторы>
end;
12. Правила написания
конструкции while do
while <условие> do
begin
<операторы>
end;
while <условие> do <оператор>;
while <условие> do
<оператор>;
13. Правила написания
конструкции for
for <счетчик> := <нач. знач.> to <конеч. знач.> do
begin
<операторы>
end;
for <счетчик> := <нач. знач.> to <конеч. знач.> do
<оператор>;
14. Правила написания
конструкции case
case <выражение> of
<выражение> : <оператор>;
…
end;
case <выражение> of
<выражение> : <оператор>;
…
else
<оператор>
end;
case <выражение> of
<выражение> :
begin
<операторы>
end;
end;
15. Другие соглашения
Операнды бинарных операций (+, := и т.п.) отделять от знака
операции одним пробелом " ".
Например: Sum := A + B;
При перечислении идентификаторов после запятой ","
ставить один пробел " ".
WriteLn('Сумма: ', A + B, ';', 'Разность: ', A - B,
'.');
Всегда писать символ-разделитель операторов ";" (сразу же
после оператора).
После символа-спецификатора типа ":" ставить один пробел " ".
var
i: Integer;
16. Спецификация процедур и функций
Для каждой пользовательской процедуры или функции
должна быть описана в виде комментария
спецификация, содержащая следующую информацию:
а) назначение процедуры или функции;
б) описание семантики параметров-значений (параметров,
передаваемых по значению), если она неочевидна;
в) описание семантики параметров-переменных
(параметров, передаваемых по ссылке), если она
неочевидна.
г) для функции: описание семантики возвращаемого
значения, если она неочевидна.
17. Спецификация процедур и функций
семантика параметров и возвращаемого значения очевидна
function IsLeapYear(Y: Word): Boolean;
{ возвращает True, если год Y -- високосный }
семантика параметров очевидна, семантика возвращаемого
значения неочевидна
function DayOfWeek(D, M, Y: Word): Byte;
{ Возвращает день недели даты D/M/Y;
год Y должен быть в отрезке 1582..4902;
результат: ВСК = 0, ПНД = 1, ВТР = 2, ... СБТ = 6 }
18. Спецификация процедур и функций
const
MaxN = 10;
type
Matrix = array [1..MaxN, 1..MaxN] of Real;
Vector = array [1..MaxN] of Real;
procedure Gauss(A: Matrix;
B: Vector;
Eps: Real;
var X: Vector;
var HasSolution: Boolean;
var NumOfRoots: Integer;
var Det: Real;
var AForReverse: Matrix;
var BForReverse: Vector);
20. Спецификация пользовательского
программного файла или модуля
Программный файл или модуль (unit) должен начинаться со
спецификации в виде комментария, содержащего
следующую информацию:
а) идентификация (имя) файла;
б) фамилия автора;
в) дата написания файла;
г) версия языка компилятора Pascal и -- если требуется --
замечания по компиляции программы (модуля) в других
версиях языка;
д) назначение программы (модуля);
21. Домашнее задание
Оформить код лабораторной работы №1 согласно
соглашениям, распечатать и сдать на проверку.
+ титульный лист, где ФИО, группа, название
дисциплины
+ исходное задание.
Код вставлять в виде скриншотов (открыть .pas в
блокноте) достаточного для комфортного просмотра
разрешения.
22. Соответствие типов в системном
программировании
При разработке системных программ от программиста
требуется четкое и правильное понимание представления
каждого типа в памяти компьютера, умение
преобразовывать типы данных и заранее прогнозировать
результаты таких преобразований.
Наиболее эффективным с точки зрения быстродействия и
экономии памяти являются типы данных, размер которых
равен разрядности процессора и операционной системы.
При разработке системных программ, библиотек, модулей
под управлением 32-х разрядных операционных систем
семейства Microsoft Windows практически всегда
используются 32-х битные (4 байта) переменные.
26. Логический тип при вызове функций API
Логические переменные представляются в подавляющем
большинстве случаев четырехбайтовой переменной,
нулевое значение которой трактуется как «ложь»,
ненулевое – как «истина».
В языке Free Pascal для описания таких переменных
предназначен тип LongBool.
Тип Boolean тоже может быть использован, но следует
помнить, что он является однобайтовым.
30. Числовой тип при вызове функций API
Числовые значения также в большинстве случаев хранятся
в четырёхбайтовых переменных.
В языке Free Pascal для описания таких переменных
предназначены два типа: Integer и Cardinal –
соответственно знаковое и беззнаковое 32-рарядное
целое число.
Иногда в некоторых функциях API используются
двухбайтовые значения, для них также есть соответствия в
Free Pascal.
Выбор конкретного типа зависит от требований к
диапазону значений и занимаемой памяти.
При необходимости возможно преобразование типов.
31. Тип указатель при вызове функций API
Указатели на объекты, структуры, значения обычно
представляются типами, различными по описанию, но
общими по представлению в памяти.
Базовым типом для хранения указателей в Free Pascal
является тип Pointer.
Также определены большое количество различных
типизированных указателей, таких как PAnsiString, PString,
PByteArray, PCurrency, PExtended, PShortString и другие.
В 32-хразрядных операционных системах Microsoft
Windows используется линейная модель памяти, где адрес
ячейки памяти является 32-хразрядным значением.
Следовательно, любой указатель можно рассматривать как
четырехбайтовую переменную, хранящую значение
адреса.
32. Тип строка при вызове функций API
Строки при вызове функций API практически всегда
передаются в формате с завершающим нулевым
символом.
Для описания таких строк в языке Free Pascal
предназначены типы PChar, PansiChar и PWideChar.
Эти типы являются обычными указателями и к ним
применимо все, написанное выше.
33. Тип PChar
Поскольку нам придется иметь дело со строками, то
следует иметь в виду вот что: в динамических библиотеках
рекомендуют применять строковый тип PChar.
Это связано с тем, что вашей DLL могут пользоваться
программисты, создающие приложения на других
платформах. В среде Windows тип PChar считается
"родным", все WinAPI-функции используют этот тип.
Внутри DLL-файла можно использовать
любой строковый тип, но для передачи параметров и для
получения результатов лучше использовать PChar.
34. Преобразование типов: из String в PChar
var
MyString : String;
AnotherString: PChar;
…
MyString := String(AnotherString);
AnotherString := PChar(MyString);
35. Дескрипторы при вызове функций API
Дескрипторы различных объектов представляются типами,
такими как HWnd, THandle, HMenu, HINST и др.
По сути это обычные 32-хразрядные числовые
переменные.
36. Предпосылки появления DLL
Современное программирование стало достаточно
сложным, уже написаны километры строк кода, и
некоторые его части время от времени приходится
дублировать в разных программах.
Если бы каждый программист в каждой новой программе
заново писал весь необходимый код, языки
программирования никогда бы не получили такого
стремительного развития.
Однако мы в своих проектах можем использовать
инструменты, созданные другими программистами - типы,
процедуры, функции… Мы уже неоднократно подключали
к нашим проектам различные модули и пользовались
описанными в них средствами.
37. Вопросы
Какими модулями Вы пользовались при написании
программ?
Как модули включаются в программах на языке Free
Pascal?
41. Недостатки модульного подхода
при использовании модульного подхода, в момент
компиляции проекта в него внедряется весь тот код,
который был описан в модуле => увеличение .exe
файла + загрузка оперативной памяти
Зависимость от языка - мы можем использовать чужой
код, только если он написан на таком же языке
программирования, каким пользуемся мы.
42. Выход есть – пишем DLL !!!
DLL (англ., Dynamic Link Library - Динамически
Подключаемые Библиотеки) - универсальный
механизм внедрения в программу функций и
процедур, написанных другими программистами, и
возможно, на другом языке программирования.
Внедрение происходит не в момент компиляции
проекта, как в случае модулей, а в момент загрузки
готовой программы в оперативную память.
43. DLL в различных ОС
В нашем курсе подразумевается, что мы используем
операционную систему семейства Windows, однако
механизм динамически подключаемых библиотек
существует во всех современных операционных
системах.
В Windows такая библиотека представляет
собой файл *.dll, в Linux и Unix -
*.so (Shared Object Library), а в MacOS X -
*.dylib (Dynamic Shared Library).
И все эти библиотеки можно создавать с помощью
Lazarus. Учитывая, что мы используем ОС Windows, мы
будем рассматривать создание dll-файлов.
44. Разработка DLL в Lazarus
Пример программы
Исходный код: Digit.pas
45. Соглашения по вызову процедур
Чтобы в программе можно было использовать
инструменты из динамических библиотек сторонних
разработчиков, были разработаны специальные
соглашения по вызову процедур. Эти соглашения
определяют различные правила вызова подпрограмм:
как будут передаваться параметры - через стек, через
регистры, через динамическую память; кто
ответственный за очистку стека - вызывающая или
вызываемая программа и т.д. Так, если
используется стек, то чтение будет происходить
справа налево. То есть, последние загруженные
данные будут считаны первыми.
46. Сведения по соглашениям вызова подпрограмм
Команда вызова
Обработка
параметров
Ответственный за
очистку стека
Разрешена ли
передача
параметров через
регистры
Register Слева-направо Подпрограмма Да
Pascal Слева-направо Подпрограмма Нет
Cdecl Справа-налево Вызывающая
программа
Нет
Stdcall Справа-налево Подпрограмма Нет
47. Соглашения по вызову процедур
Для программ на Windows чаще всего используют
соглашение stdcall. А если вы создаете DLL, которую
затем могут использовать Си-программисты, то
указывайте соглашение cdecl.
48. Вызов DLL из внешней программы
Библиотеку DLL можно связать с приложением двумя
способами:
статическим связыванием
динамическим связыванием
49. Вызов DLL из внешней программы
Библиотеку DLL можно связать с приложением двумя
способами:
статическим связыванием
динамическим связыванием
50. Вызов DLL из внешней программы
Библиотеку DLL можно связать с приложением двумя
способами:
статическим связыванием
динамическим связыванием
51. Статическое связывание
Статическое связывание самое простое, оно
подразумевает, что DLL будет загружена сразу, как
только приложение начнет выполняться. Это самый
простой способ использования DLL, обращение к
процедурам и функциям динамической библиотеки
такое же, как к обычным процедурам и функциям.
52. Статическое связывание. Недостатки
при загрузке программы должны подгружаться и все
используемые DLL, а это увеличивает время загрузки
чтобы пользователь мог работать с программой, он
должен иметь все эти используемые DLL
при статическом связывании все
загруженные DLL занимают память всё время, что
работает программа, вне зависимости от того,
использует ли она эти DLL в настоящее время, или нет.
54. Динамическое связывание
Динамическое связывание подразумевает, что
требуемая DLL будет подгружаться только тогда, когда
требуется выполнить какую-то процедуру или
функцию из неё. После чего DLL можно выгрузить,
освободив память.
55. Динамическое связывание. Достоинства и
недостатки
Плюсы в том, что программу можно использовать, не
имея всех DLL. Загрузка программы будет
осуществляться быстрее, поскольку DLL будут
подгружаться по мере необходимости, а не вместе с
программой.
Минусы же в том, что из-за необходимости
подгружать и выгружать библиотеку, будет
увеличиваться время обращения к её функциям и
процедурам. Кроме того, само обращение к ним будет
намного сложнее.