2016-04-04 4 views
0

Я хочу написать программу, которая может выполнять поиск в файлах исходного кода для определенных шаблонов ... другими словами: вход представляет собой кусок кода, например:Apache Solr - Как индексировать файлы исходного кода

int fib (int i) { 
    int pred, result, temp; 

    pred = 1; 
    result = 0; 

    while (i > 0) { 
    temp = pred + result; 
    result = pred; 
    pred = temp; 
    i = i-1; 
    } 
    return(result); 
} 

Выходные файлы - это файлы, содержащие этот фрагмент кода или аналогичный код.

В коде Open Source World используется в других проектах. Особенно библиотеки часто копируются в проекты. Чтобы облегчить исправление ошибок, мне нужно знать, в каких проектах используются конкретные библиотеки или код.

Поэтому я хочу попробовать использовать apache solr. Я не знаю, хорошая ли это (я буду рад всему, что может мне помочь)

Мой план состоит в том, чтобы индексировать мои файлы исходного кода ... поэтому мне нужны некоторые инструменты? tokenize файлы исходного кода. Например, дайте мне все имена функций, переменных и т. Д. Выход, который я могу использовать для подачи индекса solr. Но я не уверен, может быть, есть уже токенизатор или dataimporthandler в apache solr, которые делают трюк?

ответ

1

Я не уверен, что это можно сделать с помощью solr, поскольку разные проекты могут использовать разные соглашения об именах.

Посмотрите на ссылку ниже, если это поможет:

Tools for Code Seacrh

0

Apache Solr, вероятно, не самый лучший вариант здесь. У вас больше похоже проблема сравнения дерева/графа, чем сравнение строк здесь. Я бы рекомендовал использовать для этого специальные инструменты.

Если вы хотите сделать это вручную, вам в основном нужен парсер с API обхода деревьев или каким-либо другим способом получить поток/дерево токенов. Это будет сильно зависеть от языка, который вы разбираете. Что-то вроде ANTLR может быть одним из способов, если у вас есть грамматика для вашего языка.

В качестве альтернативы вы можете извлечь информацию из скомпилированного кода, если она достаточно структурирована. Для Java это может сделать что-то вроде ASM.

Но вам все равно придется выяснить представление. Ответ - на себя - вопрос , как я узнаю, что эти две части кода аналогичны должен быть первым первым шагом.