Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Детальный программный анализ исходного текста, Метод Холстеда: не получается посчитать  
:(
    Опции темы
Мурлыкатам_
Дата 22.10.2007, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Задача    : с помощью Метода Холстеда проанализировать исходный файл с# и сделать вывод о сложности программы.

Проблема: как посчитать количество стандартных операторов и пользовательских (тоже и для операндов). 

Как сделать анализ текста? У меня пока получается следующее:

1. Первый метод считывает файл в строковый массив.
2. Второй метод считает в массиве все комментарии и вытирает их.
3. Третий метод считает все пустые строки и вытирает их.
4. Четвертый метод считывает базу зарезервированных слов с# (92 слова, учитывая знаки операций).
5. Пятый в цикле делает примерно следующее:
Код

public void LookForUserOperands()
        {
            int FirstAppearence = -1;
            int AnotherAppearence = -1;
            string tempo;
            //string[] tempoUOperands = {"int", "bool", "string", "double", "float", "char", "byte", "object", "."};
            for(int i = 0; i < TextToWorkByStrings.Length; i++)
            {
                for(int i3 = 0; i3 < ReservedWordsFromFile.Length - 1; i3++)
                {
                    FirstAppearence = TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], 0);
                    if(FirstAppearence != -1)
                    {
                        StandartOperatorsCount++;
                    }
                }
                
            }

В этом случае конечно очевидно, что метод далек от совершенства... Но возникает вопрос, как заменить операцию 
Код

FirstAppearence = TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], 0);
 На более совершенную, потому что если слово в строке повторяется 2 раза, то мой метод посчитает тока 1 раз. Видел в учебнике метод классный 
Код

string temp; temp.Consist(....);
 Но почему-то в моей 2003 студии или в моем фрэймворке его нету ... 
Может кто-то сталкивался с метриками холстеда и подскажет какой-нить алгоритм анализа текста...
Помогите плз, чем можете..
А еще вопросец:
Код

StreamReader sreader2 = File.OpenText(@"G:\Documents and Settings\EgorKa\Мои документы\Visual Studio Projects\KRHolsted\bin\Debug\reservedwords.krh");

Подскажите как вместо этого пути привязаться к папке в которой лежит экзешник? А то после опенФайлДиалога у мя почему-то явление привязки к папки с экзешником передвигается в ту папку из которой диалогом открывали файл...


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
zaver
Дата 22.10.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 15.8.2005

Репутация: нет
Всего: 3



стоило тему назвать не "метод Холстеда", а "как найти кол-во вхождений слова в строку".  smile 
вместо 
Код

 FirstAppearence = TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], 0);
                    if(FirstAppearence != -1)
                    {
                        StandartOperatorsCount++;
                    }

вставить
Код

            int  ind=TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], 0);
            while (ind >= 0)
            {
                StandartOperatorsCount++;
                ind = TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], ind +ReservedWordsFromFile[i3].Length);
            }

PM MAIL WWW ICQ Skype YIM MSN   Вверх
peaceduke
Дата 22.10.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.4.2007

Репутация: нет
Всего: 2



Цитата

Подскажите как вместо этого пути привязаться к папке в которой лежит экзешник? А то после опенФайлДиалога у мя почему-то явление привязки к папки с экзешником передвигается в ту папку из которой диалогом открывали файл...


Код

StreamReader sreader2 = File.OpenText(Application.StartupPath + "reservedwords.krh");

PM MAIL   Вверх
Мурлыкатам_
Дата 23.10.2007, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Спасибо братцы!!! Когда наберу 100 постов ))) понажимаю вам +++++ в репутации )))

Код

 int  ind=TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], 0);
            while (ind >= 0)
            {
                StandartOperatorsCount++;
                ind = TextToWorkByStrings[i].IndexOf(ReservedWordsFromFile[i3], ind +ReservedWordsFromFile[i3].Length);
            }


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


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
Мурлыкатам_
Дата 24.10.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Возникли еще  вопросы по анализу строк:

1. Как узнать сколько вхождений в строку составляют си шарп операторы (стандартные - генерируемые компилятором)?
2. Как проанализировать, что подопытная строка содержит операторы, созданные пользователем?  smile 

С пользователем совсем трудно... стандартные то можно отловить по #region #endregion и по типовой структуре приложения Application.Run .. и т.д. По крайней мере есть от чего отталкнуться... А с пользовательскими че делать?? Если юзер щелкает в студии на "MouseEnter Event" и генерируется автоматически код события - это стандартное событие или пользовательское?




--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
zaver
Дата 25.10.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 15.8.2005

Репутация: нет
Всего: 3



Цитата

Если юзер щелкает в студии на "MouseEnter Event" и генерируется автоматически код события - это стандартное событие или пользовательское?

ясно что стандартное. пользователь же сам его не создавал. он создал только делегат.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
Мурлыкатам_
Дата 27.10.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Вопрос остаётся актуальным:
1. Как узнать сколько вхождений в строку составляют си шарп операторы (стандартные - генерируемые компилятором)?
По какому принципу их считать? private + тип + "(" + ";" ? И чтобы были после конструктора формы? Как тогда выбрать конечную точку подсчета?

2. Как проанализировать, что подопытная строка содержит операторы, созданные пользователем?   
модификатор доступа + тип + "(" + ";" ? ... блин я даже не знаю как их считать  smile 




--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0879 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.