| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Выделение конструкций исходного кода |
| Автор: WhoogMan 4.2.2015, 12:13 |
| требуется из исходного кода, написанного на любом языке, по заданным настройкам (список ключевых слов, регулярные выражения) выделять основные элементы с сохранением позиции этого элемента в коде. Проблема в поиске переменных: для их поиска используется регулярное выражение для поиска любых слов (с ограничениями, наложенными на состав их имен), т.е. регулярка, которая находит все слова, которые могут быть также ключевыми или могут быть в составе других конструкций (циклов, условий), которые должны выделяться отдельно без разбора содержимого. первым вариантом я проходил по всему коду, искал все слова и проверял, являются ли они ключевыми, а циклы, условия и прочее заранее вырезал, что не позволяло сохранить индексы элементов в тексте второй вариант: первый раз проходил, отмечая ключевые фразы, заданные настройками, спец тегами с указанием длины следующей за спец тегом фразы, чтобы не производить поиск в них. Вторым проходом искал все слова, не отмеченные тегом являлись переменными. Но здесь возникла проблема в тегах: одни теги, отмечались другими (например, поскольку тег содержит длину следующей за ним конструкции, он отмечался тегом, обозначающим числа; или две косых черты отмечались как оператор, а затем как комментарий) |
| Автор: Akina 4.2.2015, 12:53 |
| Прямым проходом такие вещи не делаются. Код - это куст (мультидерево). И разбор нужно вести именно так. Попалась конструкция? ищем, где она завершается. Если при поиске попалась вложенная конструкция - рекурсивно сперва обрабатываем её. И так далее. Переменная/литерал - это то, что не опознано как вложенная конструкция или элемент текущей конструкции. |