2014-02-08 3 views
0

Я пытаюсь построить интерфейсную программу в java для анализа любого java-файла и получить результат измерения Halstead, но я столкнулся с проблемой при анализе входного файла, я много читаю о проектах Antlr и JavaParsing но на самом деле не может понять, как мы можем его использовать. Мои вопросы таковы:метрики здания halstead в java

1 есть ли какая-либо команда по умолчанию в компиляторе java для синтаксического анализа любой строки и найти любой операнд или оператор в этой строке строки ввода. не 2 - если ответ не может ни одна помощь в отправке небольшой пример об использовании Javaparsing или Antlr библиотеки

Ваша обычная поддержка ценится С наилучшими пожеланиями

+0

посмотрите по адресу: // WWW. sonarqube.org/ Возможно, источник доступен из одного из их плагинов. – OldProgrammer

+0

Я использую JAVAPARSER, но я знаю, есть ли какая-либо командная помощь в этом – JavaTrainner

ответ

0

Я не знаю ни одного из командной строки синтаксического анализа, что делает это ,

ANTLR не прост, но то, что вы хотите сделать, это создать парсер из Java-грамматики. Это, как мы создаем нашу грамматику (вы можете скачать грамматику здесь - https://github.com/antlr/grammars-v4/tree/master/java):

общественного класса GenerateVisitor {

public static void main(String[] args) { 
     String[] arg0 = { "-visitor", "D:/grammars/antlr/Java.g4", "-package", "com.virtualmachinery.jhawk.antlr" }; 
     org.antlr.v4.Tool.main(arg0); 
    } } 

Когда вы сделаете это, вы найдете у вас есть 6 сгенерированных классов и два файла.

Очевидно, что я не могу научить вас, как использовать ANTLR за 5 минут, но то, что вы хотите сделать, это создать посетителя, который расширяет созданный JavaVisitor-класс. Затем вы можете переопределить методы, которые посещают методы, а затем проанализировать контекст, который передается. Затем вы можете выделить маркеры, которые являются операторами и токенами, которые являются операндами, с помощью оператора switch.

В нашем коде мы делаем что-то вроде этого:

public static void handleTokens(ParseTree ctx) 
     List<Token> tokens = getTokens(ctx); 
     int type; 
     for (Token each: tokens) { 
      type = getHalsteadType(type); 
     } 
} 

типы все определены как константы в классе JavaParser. Существует некоторая дискуссия о том, какие маркеры могут быть проигнорированы, которые являются операторами и которые являются операторами - вы можете найти информацию о том, как принять это решение здесь -

www.virtualmachinery.com/sidebar2.htm

Смежные вопросы