определи по фрагменту кода тип языка программирования
Определение языка программирования по фрагменту
Как лучше всего определить, какой язык программирования используется во фрагменте кода?
17 ответов
Я думаю, что метод, используемый в фильтрах спама, будет работать очень хорошо. Вы разбили фрагмент на слова. Затем вы сравниваете вхождения этих слов с известными фрагментами и вычисляете вероятность того, что этот фрагмент написан на языке X для каждого интересующего вас языка.
Я фактически использовал этот метод, чтобы добавить определение языка к фрагментам кода для программного обеспечения форума. Это работало 100% времени, за исключением неоднозначных случаев:
Позвольте мне найти код.
Я не смог найти код, поэтому я создал новый. Это немного упрощенно, но это работает для моих тестов. В настоящее время, если вы добавите в него гораздо больше кода Python, чем кода Ruby, скорее всего, этот код будет выглядеть так:
Я надеюсь, что это поможет вам:
Определение языка, решаемое другими:
ОБНОВЛЕНИЕ: Я попробовал это, и это не сработало. Сжатый JavaScript полностью запутал его, т.е. е. токенизатор чувствителен к пробелам. Как правило, просто подсчет хитов не очень надежен. Более сильный синтаксический анализатор или, возможно, непревзойденное количество разделов может работать лучше.
Это очень сложно, а иногда и невозможно. С какого языка этот короткий фрагмент?
(Подсказка: это может быть любой из нескольких. )
Вы можете попытаться проанализировать различные языки и попытаться решить, используя частотный анализ ключевых слов. Если в тексте встречаются определенные наборы ключевых слов с определенными частотами, вероятно, это язык Java и т. Д. Но я не думаю, что вы получите что-то полностью защищенное от ошибок, поскольку вы могли бы назвать, например, переменную в C тем же именем, что и ключевое слово в Java, и частотный анализ будет обманут.
Если вы поднимитесь на ступеньку сложности, вы можете искать структуры, если одно ключевое слово всегда идет после другого, это даст вам больше подсказок. Но это также будет гораздо сложнее спроектировать и реализовать.
Guesslang является возможным решением:
Есть также SourceClassifier:
Я заинтересовался этой проблемой после нахождения некоторого кода в статье блога, который я не смог идентифицировать. Добавление этого ответа, так как этот вопрос был первым поисковым хитом для «определения языка программирования».
Во-первых, я бы попытался найти конкретные ключевые слова языка e. г.
Это будет зависеть от того, какой у вас фрагмент кода, но я бы проверил его через серию токенизаторов и посмотрел, с каким BNF-языком он подходит.
Мне нужно было это, поэтому я создал свой собственный. https: // github. com / bertyhell / CodeClassifier
Его очень легко расширить, добавив обучающий файл в нужную папку. Написано в C #. Но я думаю, что код легко конвертируется на любой другой язык.
Я думаю, что невозможно обнаружить все языки. Но вы можете активировать ключевые токены. (определенные зарезервированные слова и часто используемые комбинации символов).
Бен есть много языков с похожим синтаксисом. Так что это зависит от размера фрагмента.
В основном это подсветка синтаксиса, но, вероятно, есть способ извлечь часть обнаружения для целей обнаружения языка из фрагмента.
Установите случайный скремблер как
Объедините это с решением Жюля, и оно должно работать довольно хорошо. Может также искать частоты ключевых слов для дополнительной точки.
После того, как у вас есть приложение rails, чтобы использовать его, добавьте gem ‘github-linguist’ в ваш Gemfile (буквально просто с именем Gemfile в каталоге приложения, без ext).
Затем установите ruby-dev ( sudo apt-get install ruby-dev )
Затем установите cmake ( sudo apt-get install cmake )
Теперь вы можете запустить gem install github-linguist (если вы получите ошибку, которая говорит, что icu требуется, выполните sudo apt-get install libicu-dev и повторите попытку)
Это кажется большой дополнительной работой, особенно если у вас еще нет рельсов, но вам на самом деле не нужно ничего знать о рельсах, если вы выполните эти шаги, и я просто не нашел лучшего способа обнаружить язык файла / фрагмент кода.
Вы можете видеть, что языки программирования просто слишком сильно перекрывают друг друга. Одно ключевое слово, которое может быть ключевым словом на одном языке, может оказаться ключевым словом на другом языке. Использование комбинации ключевых слов, которые часто сочетаются друг с другом, например, public static void main(String[] args) Java, помогает устранить эти проблемы.
Я бы не подумал, что будет легкий способ сделать это. Я, вероятно, сгенерирую списки символов / общих ключевых слов, уникальных для определенных языков / классов языков (например, г. фигурные скобки для языка стиля C, ключевые слова Dim и Sub для языков BASIC, ключевое слово def для Python, ключевое слово let для функциональных языков. Тогда вы сможете использовать основные синтаксические функции, чтобы сузить его еще больше.
Интересно. У меня похожая задача распознать текст в разных форматах. Свойства YAML, JSON, XML или Java? Например, даже с синтаксическими ошибками я должен с уверенностью отличать JSON от XML.
Наконец, если я выберу классификатор типа случайного леса, я буду сканировать github и собирать весь открытый исходный код. Большая часть файла исходного кода может быть помечена суффиксом файла. Для каждого файла я буду случайным образом разбивать его на пустые строки на фрагменты разных размеров. Затем я извлеку функции и обучу классификатор, используя помеченные фрагменты. После завершения обучения классификатор может быть проверен на точность и отзыв.
Определение языка программирования по фрагменту
Как лучше всего определить, какой язык программирования используется во фрагменте кода?
17 ответов
Я думаю, что метод, используемый в фильтрах спама, будет работать очень хорошо. Вы разбили фрагмент на слова. Затем вы сравниваете вхождения этих слов с известными фрагментами и вычисляете вероятность того, что этот фрагмент написан на языке X для каждого интересующего вас языка.
Я на самом деле использовал этот метод, чтобы добавить определение языка к фрагментам кода для программного обеспечения форума. Это работало 100% времени, за исключением неоднозначных случаев:
Позвольте мне найти код.
Я не мог найти код, поэтому я сделал новый. Это немного упрощенно, но это работает для моих тестов. В настоящее время, если вы добавите в него гораздо больше кода Python, чем кода Ruby, скорее всего, этот код будет выглядеть так:
код Python (хотя на самом деле это Ruby) Это потому, что Python имеет def ключевое слово тоже. Так что, если он видел 1000x def в Python и в 100 раз def в Ruby, то он все еще может сказать Python, хотя puts а также end является специфичным для Ruby. Вы можете исправить это, отслеживая количество слов, встречающихся в каждом языке, и деля их где-то (или передавая одинаковое количество кода на каждом языке).
Я надеюсь, что это поможет вам:
Определение языка решается другими:
Вы можете найти некоторые полезные материалы здесь: http://alexgorbatchev.com/wiki/SyntaxHighlighter. Алекс потратил много времени на то, чтобы разобраться, как анализировать большое количество разных языков, и каковы основные элементы синтаксиса.
Также есть SourceClassifier:
Я заинтересовался этой проблемой после нахождения некоторого кода в статье блога, который я не смог идентифицировать. Добавление этого ответа, так как этот вопрос был первым поисковым хитом для «определения языка программирования».
Это очень сложно, а иногда и невозможно. С какого языка этот короткий фрагмент?
(Подсказка: это может быть любой из нескольких.)
Если вы возьмете его на ступеньку сложности, вы можете искать структуры, если одно ключевое слово всегда идет после другого, это даст вам больше подсказок. Но это также будет гораздо сложнее спроектировать и реализовать.
Альтернативой является использование highlight.js, который выполняет подсветку синтаксиса, но использует показатель успешности процесса выделения для определения языка. В принципе, любая кодовая база для подсветки синтаксиса может быть использована таким же образом, но хорошо в highlight.js то, что обнаружение языка считается функцией и используется в целях тестирования.
ОБНОВЛЕНИЕ: я попробовал это, и это не сработало так хорошо. Сжатый JavaScript полностью запутал его, то есть токенизатор чувствителен к пробелам. Как правило, просто подсчет хитов не очень надежен. Более сильный синтаксический анализатор или, возможно, непревзойденное количество разделов может работать лучше.
Во-первых, я бы попытался найти конкретные клавишные инструменты языка, например
Я думаю, что невозможно обнаружить все языки. Но вы можете активировать ключевые токены. (определенные зарезервированные слова и часто используемые комбинации символов).
Бен много языков с похожим синтаксисом. Так что это зависит от размера фрагмента.
Это будет зависеть от того, какой у вас фрагмент кода, но я бы проверил его через серию токенизаторов и посмотрел, с каким BNF-языком он подходит.
Мне нужно было это, поэтому я создал свой собственный. https://github.com/bertyhell/CodeClassifier
Его очень легко расширить, добавив обучающий файл в нужную папку. Написано в C#. Но я думаю, что код легко конвертируется на любой другой язык.
Это в основном подсветка синтаксиса, но, вероятно, есть способ извлечь часть обнаружения для целей обнаружения языка из фрагмента.
У меня есть несколько советов. В настоящее время я пишу небольшой фрагмент кода для моего сайта, который можно использовать для определения языков программирования. Как и большинство других постов, может быть огромный диапазон языков программирования, которые вы просто не слышали, вы не можете объяснить их все.
Если в моем примере вы не можете найти двоеточие для начала набора операторов, перейдите к другой возможной особенности, скажем, используя def ключевое слово для определения функции. Теперь это может вызвать некоторые проблемы, потому что Ruby также использует ключевое слово def определить функцию. Ключом к тому, чтобы отличить два (Python и Ruby) друг от друга, является использование различных уровней фильтрации для достижения наилучшего соответствия. Руби использовать ключевое слово end завершить функцию, в то время как Python не имеет ничего для завершения функции, только отступ, но вы не хотите туда идти. Но опять же end также может быть Lua, еще один язык программирования, чтобы добавить к смеси.
Вы можете видеть, что языки программирования просто слишком сильно перекрывают друг друга. Одно ключевое слово, которое может быть ключевым словом на одном языке, может оказаться ключевым словом на другом языке. Использование комбинации ключевых слов, которые часто идут вместе, например, Java public static void main(String[] args) помогает устранить эти проблемы.
Если у вас есть какое-либо приложение rails, с которым вы не возражаете временно порвать, создайте в нем новый файл, чтобы вставить нужный фрагмент кода. (Если у вас не установлены рельсы, есть хорошее руководство, хотя для Ubuntu я рекомендую это. Затем запустите rails new и перейдите в этот каталог. Все, что вам нужно для запуска приложения rails, уже есть).
После того, как у вас есть приложение rails для использования с этим, добавьте gem ‘github-linguist’ в ваш Gemfile (буквально просто называется Gemfile в каталоге вашего приложения, не ext).
Затем установите ruby-dev ( sudo apt-get install ruby-dev )
Затем установите cmake ( sudo apt-get install cmake )
Теперь вы можете запустить gem install github-linguist (если вы получаете сообщение об ошибке icu, сделайте sudo apt-get install libicu-dev и попробуй еще раз)
(Возможно, вам нужно сделать sudo apt-get update или же sudo apt-get install make или же sudo apt-get install build-essential если выше не сработало)
Это кажется большой дополнительной работой, особенно если у вас еще нет рельсов, но вам на самом деле не нужно знать НИЧЕГО о рельсах, если вы выполните эти шаги, и я просто действительно не нашел лучшего способа обнаружить язык файла / фрагмент кода.
Исходный код и его 11 составляющих
Теперь, когда вы понимаете концепцию программирования, мы рассмотрим исходный код – его главные составляющие и принципы работы с ними.
Часть 2 – Исходный код
В предыдущей части мы затронули азы программирования, где рассказали о машинном языке, преобразователях, языках программирования и работе с CLI. Двигаемся дальше.
Исходным кодом называется основной файл вроде Microsoft (.doc), но немного другой. Это текстовый файл, написанный с помощью простых редакторов, таких как Windows Блокнот. В предыдущем разделе мы перечислили, что нужно, чтобы интерпретаторы или компиляторы конвертировали исходный код в двоичный. Первый должен быть сохранен в файле, что передается для ввода в переводчик (преобразователь).
Когда вы закончите писать код, запустите его через переводчик. Рассмотрим в качестве примера запуск кода на языке Python с использованием команды python.
Начало работы: ваша первая программа
3. Откройте в нем новый файл и введите следующее:
Результат должен выглядеть так:
Анатомия типичного кода
Теперь мы рассмотрим содержимое типичного файла исходного кода. Ниже приведены регулярные компоненты.
Ключевые слова
Короткие человекочитаемые слова, обычно называемые ключевыми. Они свойственны изучаемому вами языку и они особенны. Их просто нужно знать. Вот небольшой набор ключевых слов, часто используемых в Python.
Идентификаторы
Слова, изобретенные вами. Да, не удивляйтесь! Вы, программист. Эти слова обычно называются идентификаторами. Они могут быть созданы вами или другими программистами. Они упакованы в плагины, более известные как библиотеки.
Примером является библиотека Math. Она позволяет получить доступ к функциям, таким как квадратный корень (Math.sqrt), используемый в JavaScript.
Многие языки программирования поставляются со множеством библиотек. Они обычно называются SDK (комплекты разработки программного обеспечения). Загружаются вместе с компилятором для дальнейшего создания технологий, приложений и проектов. Также существуют фреймворки, созданные, чтобы облегчить разработку проекта и объединить его различные составляющие.
Некоторые идентификаторы в комплекте с выбранным языком не могут использоваться в качестве идентификатора пользователя. Примером является слово string в Java. Такие идентификаторы вместе с ключевыми словами называются Зарезервированными Словами. Они также являются особыми.
Все ключевые слова являются зарезервированными. Также слова, которые вы выбираете, должны иметь смысл для тех, кто впервые их видит.
Основные типы данных
Целые числа могут быть знаковыми и беззнаковыми, большими и малыми. Последние фактически зависят от объема памяти, зарезервированного для таких чисел. Есть числа с десятичными частями, обычно называемые double и float, в зависимости от языка, который вы изучаете.
Также существуют логические типы данных boolean, которые имеют значение true или false.
Сложные типы данных
Указанные выше типы известны как элементарные, первичные или базовые. Мы можем создавать более сложные типы данных из приведенных базовых.
Массив (Array) – это простейшая форма сложного типа. Строка (String) – это массив символов. Мы не можем обойтись без этих данных и часто используем их при написании кода.
Комбинация символов – это строка. Чтобы использовать аналогию, строка для компьютера означает, что слово принадлежит человеку. Слово «термометр» состоит из 9 символов – мы просто называем это строкой символов. Обработка строк – это обширная тема, которая должна изучаться каждым начинающим программистом.
Сложные типы данных поставляются с большинством языков программирования, которые используются. Есть и другие, такие как системы классов. Это явление также известно как объектно-ориентированное программирование (ООП).
Переменные
Переменные – это просто имена областей памяти. Иногда нужно сохранить данные в исходном коде в месте, откуда их можно вызвать, чтобы использовать. Обычно это место памяти, которое резервирует компилятор/интерпретатор. Нам нужно дать имя этим ячейкам памяти, чтобы потом их вспомнить. Рассмотрим фрагмент кода Python ниже:
pet_name – пример переменной, и тип данных, хранящихся в pet_name, является строкой, что делает переменную строковой. Существуют также числовые. Таким образом, переменные классифицируются по типам данных.
Константы
Константы – это значения, которые не изменяются на протяжении всего жизненного цикла программы. Чаще всего в их именах используются заглавные буквы. Некоторые языки поддерживают создание постоянных значений, а некоторые – нет.
Существуют строго типизированные языки программирования, в которых каждая переменная должна быть определенного типа. Выбрав тип один раз, вы больше не сможете его изменить. Java – хороший пример такого ЯП.
Другие же не предоставляют эти функции. Они являются свободно типизированными или динамическими языками программирования. Пример – Python.
Вот как объявить постоянное значение в JavaScript:
Литералы
В каждом исходном коде существуют типы данных, которые используются повсюду и изменяются только в том случае, если их отредактировали. Это литералы, которые не следует путать с переменными или константами. Ни один исходный код не обходится без них. Литералы могут быть строками, числами, десятичными знаками или любыми другими типами данных.
В приведенном выше фрагменте слово «Hippo» является строковым литералом. Это всегда будет «Hippo», пока вы не отредактируете исходный код. Когда вы научитесь кодить, узнаете, как управлять литералами таким образом, чтобы оставлять неизменной большую часть кода.
Пунктуация/Символы
В большинстве написанных программ вы найдете различные знаки препинания в зависимости от выбранного языка программирования. Например, в Java используется больше знаков препинания, чем в Python.
Основные знаки включают в себя запятую (,), точку с запятой (;), двоеточие (:), фигурные скобки (<>), обычные круглые скобки (()), квадратные скобки ([]), кавычки («» или »), вертикальную черту (|), слэш (\), точку (.), знак вопроса (?), карет (^) и процент (%).
Добро пожаловать в мир программирования, где знаки препинания – ваши лучшие друзья. Скоро вы обнаружите, что в коде их всегда очень много.
Операторы
Шансы, что вы будете писать исходный код для выполнения какой-нибудь операции, крайне высоки. Любые языки программирования, которые мы используем, включают в себя множество операторов. Среди применяемых выделяют сложение (+), деление (/) умножение (*), вычитание (—) и знак больше (>).
Операторы обычно классифицируются следующим образом:
Комментарии
Документация будет важным аспектом деятельности в сфере программирования. Это то, как вы объясняете свой код другим программистам. Подобное делается с помощью комментариев, которые добавляются к различным частям кода. С помощью комментариев вы можете направлять других программистов через написанную программу.
Компилятор игнорирует строки кода, которые являются комментариями.
Объявление комментариев разное для разных языков. Например, # используется для ввода комментариев в языке Python.
Вот пример комментария в Python:
Пробелы и вкладки
Это пробелы, созданные между кодом, который вы пишете. Они ставятся при нажатии пробела или клавиши табуляции на клавиатуре.
Двигаемся дальше
Вы познакомились с исходным кодом и изучили его содержимое. Скомпилированный или преобразованный код может не запускаться по ряду причин. Эти причины обычно связаны с ошибками. Действие поиска и удаления ошибок называется отладкой и является навыком, который вы должны изучить. Ошибки мы рассмотрим в следующей части.
Убедитесь, что вы правильно настроили Python в своей компьютерной системе, и запустите свою первую программу.
Викторина
Определите элементы, которые мы изучили, в приведенном ниже фрагменте кода Java:
Определение языка программирования из сниппета
Как лучше всего определить, какой язык программирования используется во фрагменте кода?
Я думаю, что метод, используемый в спам-фильтрах, будет работать очень хорошо. Вы разбиваете фрагмент на слова. Затем вы сравниваете употребление этих слов с известными фрагментами и вычисляете вероятность того, что этот фрагмент написан на языке X для каждого интересующего вас языка.
Если у вас есть базовый механизм, добавлять новые языки очень просто: просто обучите детектор с помощью нескольких фрагментов на новом языке (вы можете скормить ему проект с открытым исходным кодом). Таким образом, он узнает, что «System» может появиться во фрагментах кода C # и «положить» в фрагменты Ruby.
Я действительно использовал этот метод, чтобы добавить определение языка во фрагменты кода для программного обеспечения форума. Он работал 100% времени, за исключением неоднозначных случаев:
Я не смог найти код, поэтому сделал новый. Это немного упрощенно, но для моих тестов это работает. В настоящее время, если вы скармливаете ему гораздо больше кода Python, чем кода Ruby, он может сказать, что этот код:
— это код Python (хотя на самом деле это Ruby). Это потому, что у Python тоже есть def ключевое слово. Поэтому, если он видел 1000x def в Python и 100x def в Ruby, он все равно может говорить Python, хотя puts и end является специфичным для Ruby. Вы можете исправить это, отслеживая количество слов, отображаемых для каждого языка, и делясь на них где-нибудь (или вводя равное количество кода на каждом языке).
Надеюсь, это вам поможет:
Определение языка решено другими:
Также есть SourceClassifier:
Я заинтересовался этой проблемой после того, как нашел в статье блога код, который мне не удалось идентифицировать. Добавляем этот ответ, так как этот вопрос был первым поисковым запросом «определить язык программирования».
Это очень сложно, а иногда и невозможно. На каком языке написан этот короткий фрагмент?
(Подсказка: это может быть любой из нескольких.)
Можно попробовать проанализировать разные языки и попробовать определиться с помощью частотного анализа ключевых слов. Если определенные наборы ключевых слов встречаются с определенной частотой в тексте, вероятно, что это язык Java и т. Д. Но я не думаю, что вы получите что-либо полностью защищенное от дурака, поскольку вы могли бы назвать, например, переменную в C с тем же именем как ключевое слово в Java, и частотный анализ будет обманут.
Если вы поднимете его на ступеньку выше по сложности, вы можете искать структуры, если определенное ключевое слово всегда идет после другого, это даст вам больше подсказок. Но также будет намного сложнее спроектировать и реализовать.
ОБНОВЛЕНИЕ: я пробовал это, и это не сработало. Сжатый JavaScript полностью запутал его, т. Е. Токенизатор чувствителен к пробелам. Как правило, простой подсчет хитов не кажется надежным. Более сильный синтаксический анализатор или, возможно, несовпадающее количество разделов могут работать лучше.
Во-первых, я бы попытался найти конкретные ключевые слова языка, например
Это будет зависеть от того, какой у вас тип фрагмента, но я бы пропустил его через серию токенизаторов и посмотрел, для какого языка BNF он подходит.
Я думаю, что невозможно обнаружить все языки. Но вы можете запускать ключевые токены. (определенные зарезервированные слова и часто используемые комбинации символов).
Бен, есть много языков с похожим синтаксисом. Так что это зависит от размера сниппета.
В основном это подсветка синтаксиса, но, вероятно, есть способ извлечь часть обнаружения для определения языка из сниппета.
Его очень легко расширить, добавив обучающий файл в нужную папку. Написано на C #. Но я полагаю, что код легко конвертируется на любой другой язык.
И, возможно, еще кое-что, что должно быть в большинстве языков. Тогда используйте балльную систему. Если регулярное выражение найдено, присудите не более 1 балла за каждый элемент. Очевидно, что в некоторых языках будет использоваться один и тот же синтаксис (циклы for часто пишутся так, for(int i=0; i чтобы каждый из нескольких языков мог получить балл за одно и то же, но, по крайней мере, вы уменьшаете вероятность того, что это будет совершенно другой язык). Некоторые из них могут получить 0 баллов по всем направлениям (например, фрагмент вообще не содержит функции), но это прекрасно.
Объедините это с решением Жюля, и оно должно работать хорошо. Может быть, также поищите частоту ключевых слов для дополнительного балла.
Интересный. У меня аналогичная задача по распознаванию текста в разных форматах. Свойства YAML, JSON, XML или Java? Например, даже с синтаксическими ошибками я должен с уверенностью отличать JSON от XML.
Наконец, если я выберу классификатор, например случайный лес, я буду сканировать github и собирать весь общедоступный исходный код. Большая часть файла исходного кода может быть помечена суффиксом файла. Для каждого файла я случайным образом разделю его по пустым строкам на фрагменты разного размера. Затем я извлечу функции и обучу классификатор, используя помеченные фрагменты. После завершения обучения классификатор можно проверить на точность и отзывчивость.
После того, как у вас будет приложение rails для его использования, добавьте его gem ‘github-linguist’ в свой Gemfile (буквально только что вызванный Gemfile в каталоге вашего приложения, без расширения ).
Затем установите ruby-dev ( sudo apt-get install ruby-dev )
Затем установите cmake ( sudo apt-get install cmake )
Теперь вы можете запустить gem install github-linguist (если вы получите сообщение об ошибке, в котором говорится, что требуется icu, выполните sudo apt-get install libicu-dev и попробуйте еще раз)
(Возможно, вам придется выполнить sudo apt-get update или sudo apt-get install make или, sudo apt-get install build-essential если вышеуказанное не сработало)
Кажется, это требует много дополнительной работы, особенно если у вас еще нет рельсов, но на самом деле вам не нужно НИЧЕГО знать о рельсах, если вы выполните эти шаги, и я просто действительно не нашел лучшего способа обнаружить рельсы. язык файла / фрагмента кода.
У меня есть совет. В настоящее время я пишу небольшой фрагмент кода для своего веб-сайта, который можно использовать для определения языков программирования. Как и в большинстве других сообщений, может быть огромное количество языков программирования, о которых вы просто не слышали, вы не можете учесть их все.
Что я сделал, так это то, что каждый язык можно идентифицировать по набору ключевых слов. Например, Python можно идентифицировать несколькими способами. Вероятно, будет проще, если вы выберете «черты», которые также определенно уникальны для языка. Для Python я выбираю черту использования двоеточия для начала набора операторов, что, на мой взгляд, является довольно уникальной чертой (поправьте меня, если я ошибаюсь).
Если в моем примере вы не можете найти двоеточие для начала набора операторов, перейдите к другой возможной характеристике, скажем, используя def ключевое слово для определения функции. Теперь это может вызвать некоторые проблемы, потому что Ruby также использует ключевое слово def для определения функции. Ключом к различению этих двух (Python и Ruby) является использование различных уровней фильтрации для получения наилучшего соответствия. Ruby использует ключевое слово end для завершения функции, тогда как Python не имеет ничего для завершения функции, только удаление отступа, но вы не хотите туда идти. Но опять же, это end также может быть Lua, еще один язык программирования, который можно добавить.
Вы можете видеть, что языки программирования просто перекрывают друг друга. Одно ключевое слово, которое может быть ключевым словом на одном языке, может оказаться ключевым словом на другом языке. Использование комбинации ключевых слов, которые часто идут вместе, как в Java, public static void main(String[] args) помогает устранить эти проблемы.