Статья написана очень хорошо, качественно. Логично предположить, что продолжением лексического парсинга, является "смысловой" парсинг, о котором и предлагаю написать следующую статью. А после смыслового парсинга, нам будет рукой подать до создания ИИ. :)
ЗЫ. Только искуственную психику с базовыми интеллектуальными функциями останется дописать.
Серьезный вопрос к автору:
У меня имеется свой язык разметки. Он имеет набор правил и состоит из ключевых слов, которые являются числами.
БОльшая часть ключевых слов чередуется со строковыми словами - названиями групп или элементов, и эти строковые "лексемы" анализировать нет необходимости. Допуск ошибок в названии ключевых слов ловит компилятор MQL, потому что их дефайны подключены в файле.
Однако, пользователь может совершать нарушения правил языка при составлении кода разметки. Необходимо после компиляции проверить код на наличие ошибок связанных с правилами, а не граматикой.
Можно ли это сделать, опираясь на изложенную в статье концепцию парсинга, или требуется создать иной механизм?
Полагаюсь на Ваш опыт.
Спасибо.
...
Можно ли это сделать, опираясь на изложенную в статье концепцию парсинга, или требуется создать иной механизм?
...
Для себя выбрал такое решение: сканировать код (по сути массив значений), на наличие нарушений последовательности ключевых слов (комманд) и выводить сообщения о них в лог. В принципе просто, т.к. следить за последовательностью чисел можно через набор условий, фильтров и флагов.
Лексический, грамматический и синтаксический разбор гораздо сложнее, так как человеческие слова не имеют числового эквивалента, в отличии от комманд. Слова обладают свойствами, которые не имеют числа, и этих свойств очень много. Лексический парсинг требует работы с разными свойствами не только слов, но и фраз или пунктуации. А над всем этим "парит" смысл вложенный в текст (контекст), извлечение которого может стать задачей смыслового парсинга в будущем (не уверен, что он существует).
Для моих задач, достаточно простого контроля последовательности комманд.
Наверное, с помощью данного метода возможно написание конвертера mq4->mq5 для Маркета:
- запускается ex5-советник, которому скармливается mq4-код.
- На выходе mq5-код.
Выкладываю обновленные исходники.
Обеспечена компилируемость в последних билдах.
Исправлено несколько трудноуловимых ошибок.
Выкладываю обновленные исходники.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Синтаксический анализ MQL средствами MQL:
Статья описывает препроцессор, сканер и парсер для синтаксического анализа исходных кодов на MQL. Реализация на MQL прилагается.
Суть программирования заключается в формализации и автоматизации неких процессов с помощью языков общего или специального назначения. Торговая платформа MetaTrader позволяет применять программирование для решения самых разных задач трейдера, благодаря встроенному языку MQL. И обычно процесс программирования строится на анализе и обработке прикладных данных по правилам, изложенным в исходных кодах. Однако иногда возникает необходимость проводить анализ и обработку самих исходных кодов. Вот несколько примеров.
Одна из наиболее понятных и востребованных задач — контекстно-смысловой поиск по базе исходных кодов. Разумеется, в исходном коде можно искать строки как в обычном тексте, но при этом теряется семантика искомого. А ведь в случае исходных кодов желательно различать специфику применения подстроки в каждом конкретном случае. Если программист хочет найти, где используется конкретная переменная, например, "notification", то простой поиск по её названию может выдать много лишнего, если строка встречается в других значениях — как имя метода, литерал или в комментариях.
Более сложной и востребованной, как правило, на крупных проектах, является задача по выявлению структуры кода, зависимостей, иерархии классов. Она тесно связана с мета-программированием, которое позволяет проводить рефакторинг кода (улучшение) и кодогенерацию. Напомним, что редактор MetaEditor предоставляет некоторые возможности кодогенерации, в частности, создание исходных кодов экспертов с помощью Мастера или формирование заголовочного файла по исходному коду. Однако потенциальные возможности данной технологии гораздо шире.
Анализ структуры кода позволяет вычислять различные метрики его качества, статистику, а также находить типичные источники runtime-ошибок, которые не может выявить компилятор. На самом деле, компилятор, конечно, сам является первым инструментом анализа исходного кода, и выдает много типов предупреждений, однако проверка на все потенциальные ошибки в него, как правило, не встраивается — это слишком объемная задача, и потому её поручают отдельным программам.
Кроме того, синтаксический анализ исходных кодов используется для стилизации (форматирования) и обфускации (запутывания).
Автор: Stanislav Korotky