JASP
|
|
Ty3uK | Дата: Понедельник, 02 Апреля 2012, 12:26:42 | Сообщение # 1 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| - небольшой препроцессор для языка Jass2, который запускается перед парсером vJass (JassHelper). Полную информацию о возможностях вы можете прочитать в мануале, все ссылки внизу.
|
|
|
|
lawson | Дата: Понедельник, 07 Мая 2012, 00:33:00 | Сообщение # 176 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) ++i + ++i? Хмм ни разу такого не видел, но по идеи - сначала должны выполниться инкременты, а только потом складывать возвращенное значение.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 07 Мая 2012, 00:34:19 |
|
|
|
SirNikolas | Дата: Понедельник, 07 Мая 2012, 09:16:23 | Сообщение # 177 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| http://lurkmore.to/++i_+_++i
|
|
|
|
Ty3uK | Дата: Суббота, 02 Июня 2012, 15:50:14 | Сообщение # 178 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Я не модератор и темы закрывать не умею Добавлено (02 Июнь 2012, 15:50:14) --------------------------------------------- Возможно, кого-то это заинтересует, а кого-то заставит плясать Итак, я научил жасп взаимодействовать с cJass, т.е. их взаимное использование с этого момента возможно и даже нужно Комментим, господа
|
|
|
|
SirNikolas | Дата: Суббота, 02 Июня 2012, 16:40:16 | Сообщение # 179 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ну что еще сказать)
|
|
|
|
Ty3uK | Дата: Воскресенье, 03 Июня 2012, 18:34:37 | Сообщение # 180 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| SirNikolas, сам тихо радуюсь Добавлено (03 Июнь 2012, 18:34:37) --------------------------------------------- бтв, я переписываю жасп на с# все готовимся к катострофе
|
|
|
|
Dreii | Дата: Воскресенье, 03 Июня 2012, 19:01:17 | Сообщение # 181 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Иди учи матан!
|
|
|
|
Ty3uK | Дата: Воскресенье, 03 Июня 2012, 19:10:34 | Сообщение # 182 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| какой матан, ты же в 11 классе : trollface:
|
|
|
|
Like_a_Noob | Дата: Понедельник, 04 Июня 2012, 11:29:47 | Сообщение # 183 |
7 уровень
Группа: Проверенные
Сообщений: 253
Награды: 0
Репутация: 414
Блокировки:
| Quote (Ty3uK) бтв, я переписываю жасп на с# все готовимся к катострофе trollface хочу это увидеть
|
|
|
|
Ty3uK | Дата: Понедельник, 04 Июня 2012, 12:10:56 | Сообщение # 184 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Code using System; using System.IO; using System.Windows.Forms; using System.Collections.Generic; using SFMpq;
class JASP {
private static int MPQ; private static string[] war3map; private static List<string> script = new List<string>();
//==========================================================================================// // // **Main API** // //==========================================================================================//
private static void SplitComments() { for (int i = 0; i < war3map.Length; i++) { if (war3map[i].IndexOf("//") != -1) { int index = war3map[i].IndexOf("//"); war3map[i] = war3map[i].Substring(0, index); } } }
private static void ReplaceSpaces() { for (int i = 0; i < war3map.Length; i++) { while (war3map[i].IndexOf(" ") != -1) { war3map[i] = war3map[i].Replace(" ", " "); } war3map[i] = war3map[i].Trim(); if (war3map[i].Length > 0) script.Add(war3map[i]); } }
private static int FindBraces(int start) { int OB = 0, CB = 0, end = 0; for (int i = start; i < war3map.Length; i++) { if (war3map[i].IndexOf("{") != -1) OB++; if (war3map[i].IndexOf("}") != -1) { CB++; if (CB == OB) { end = i; break; };
} } return end; }
private static void ParseFunctions() { int start = 0, end = 0; string temp = ""; do { if (war3map[start].IndexOf("{") != -1 && war3map[start].IndexOf("library") == -1 && war3map[start].IndexOf("scope") == -1 && war3map[start].IndexOf("struct") == -1 && war3map[start].IndexOf("define") == -1 && war3map[start].IndexOf("enum") == -1) { end = FindBraces(start); for (int i = start; i < end; i++) { temp += war3map[i] + "\n"; } start = end; } start++; } while (start < war3map.Length); }
private static void ExtractScript(string aName) { MPQ = SF.MpqOpenArchiveForUpdate(aName, SF.MOAU_OPEN_EXISTING + SF.MOAU_MAINTAIN_LISTFILE, 0); SF.MpqExtractFileTo(MPQ, "war3map.j", "war3map.j"); war3map = File.ReadAllLines(@"war3map.j"); }
private void AddScript() { SF.MpqAddFileToArchiveEx(MPQ, "war3map.j", "war3map.j", SF.MAFA_REPLACE_EXISTING + SF.MAFA_COMPRESS, SF.MAFA_COMPRESS_DEFLATE, SF.Z_BEST_COMPRESSION); SF.MpqCompactArchive(MPQ); SF.MpqCloseUpdatedArchive(MPQ, 0); }
//==========================================================================================// // // End **Main API** // //==========================================================================================//
static void Main() { if (File.Exists(SF.DLL)) { ExtractScript("ololo.w3x"); SplitComments(); ReplaceSpaces(); //ParseFunctions(); //File.WriteAllLines("123.txt", war3map); } else { MessageBox.Show("File \"SFMpq.dll\" isn't exists.\nSorry :(", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
} Пока так. Бтв, юзаю собсьвенный апишник для SFmpq.dll (перенес из апишника для плюсов)
|
|
|
|
SirNikolas | Дата: Понедельник, 04 Июня 2012, 12:31:21 | Сообщение # 185 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Вон ты какой хитрый. А я думал, работаешь с посимвольным вводом.
|
|
|
|
Ty3uK | Дата: Понедельник, 04 Июня 2012, 15:25:41 | Сообщение # 186 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| ник, на дворе 2012 год (: Добавлено (04 Июнь 2012, 15:25:41) --------------------------------------------- до этого жасп вообще на регулярках одних был сейчас стараюсь без них ибо парсинг цжасса не получалось на них сделать (:
|
|
|
|
SirNikolas | Дата: Понедельник, 04 Июня 2012, 15:26:10 | Сообщение # 187 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Судя по private static void ParseFunctions(), он будет некорректно обрабатывать однострочные define'ы.
|
|
|
|
Ty3uK | Дата: Понедельник, 04 Июня 2012, 15:34:39 | Сообщение # 188 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| он и не должен их обрабатывать. согласен, алгоритм так себе, но все же лучше, чем без цжасса (;
|
|
|
|
DragoN | Дата: Понедельник, 04 Июня 2012, 17:37:00 | Сообщение # 189 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Quote (Dreii) Иди учи матан! матан не матчасть, если что апишник видел ещё не в готовом вариант, молодец)
El Psy Congroo
|
|
|
|
Ty3uK | Дата: Среда, 20 Июня 2012, 10:25:30 | Сообщение # 190 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| спасибо :3 Добавлено (20 Июнь 2012, 10:25:30) --------------------------------------------- Вот так сейчас выглядит жасп на шарпе Может вырезать комменты, строки, равы, цикл и разбивать единые строки
|
|
|
|
SirNikolas | Дата: Среда, 20 Июня 2012, 13:09:08 | Сообщение # 191 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Ty3uK) Code while (war3map[i].IndexOf(" ") != -1) { war3map[i] = war3map[i].Replace(" ", " "); } war3map[i] = war3map[i].Trim(); Однозначно нехорошо.Code bool space = true; string s = ""; for (short j = 0; j < war3map[i].Length; j++) { if (war3map[i][j] == ' ' || war3map[i][j] == '\t') { if (space) continue; space = true; } else if (space) space = false; s += war3map[i][j]; } if (s[s.Length - 1] == ' ' || s[s.Length - 1] == '\t') s.RemoveAt(s.Length - 1); war3map[i] = s;
Добавлено (20 Июнь 2012, 13:09:08) --------------------------------------------- Quote (Ty3uK) Code private static void ReplaceFlush() { for (int i = 0; i < war3map.Length; i++) { if (war3map[i].IndexOf("flush ") != -1 && war3map[i].IndexOf("locals") == -1) { war3map[i] = war3map[i].Replace("flush", "set"); war3map[i] += " = null"; } } } Следующий код не будет пропарсен:Code local unit mylocalsample = CreateUnit(...) //... flush mylocalsample
|
|
|
|
Ty3uK | Дата: Среда, 20 Июня 2012, 13:12:09 | Сообщение # 192 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Quote (SirNikolas) Однозначно нехорошо. почему? на делфи такой же алгоритм, работает достачно хорошо Quote (SirNikolas) Слудующий код не будет пропарсен: да, там надо бы пошаманить с посимвольным чтением (:
|
|
|
|
SirNikolas | Дата: Среда, 20 Июня 2012, 13:18:06 | Сообщение # 193 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Во-первых, потому что тут не отслеживается табуляция. На это ты наверняка ответишь foreach (string s in war3map) { s.Replace('\t', ' '); }. Ладно, хотя это даст еще один пробег по всему многотысячностроковому коду. Во-вторых, при нахождении двух пробелов подряд они заменяются одним пробелом, и поиск начинается заново. Зачем? В-третьих, при каждом вхождении строка перезаписывается. В-четвертых, умножаем все потери в скорости от предыдущих пунктов на количество строк в файле.
|
|
|
|
Ty3uK | Дата: Среда, 20 Июня 2012, 13:19:53 | Сообщение # 194 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| SirNikolas, ник, какая табуляция? в жнгп табы заменяются 4 пробелами, потому что в TESH поставили такую галку Но ты меня убедил, спасибо за исправленный вариант
|
|
|
|
SirNikolas | Дата: Среда, 20 Июня 2012, 13:34:44 | Сообщение # 195 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Ty3uK) в жнгп табы заменяются 4 пробелами, потому что в TESH поставили такую галку Правда? Не знал. Но ведь ты пишешь компилятор не под один редактор, верно? Может, я из Npp в JNGP код копирую?
Добавлено (20 Июнь 2012, 13:34:44) --------------------------------------------- Quote (Ty3uK) Code private static string[] SplitEmptyLines(string[] input) { int lines = 0, current = 0; for (int i = 0; i < input.Length; i++) { if (input[i].Trim().Length > 0) lines++; } string[] output = new string[lines]; for (int i = 0; i < input.Length; i++) { if (input[i].Trim().Length > 0) { output[current] = input[i]; current++; } } return output; } Я бы написал вот так:Code static string[ ] SplitEmptyLines(string[ ] input) { short lines = 0; short[ ] numbers = new short[input.Length]; for (short i = 0; i < input.Length; i++) if (input[i].Trim().Length > 0) numbers[lines++] = i; if (lines == 0) return null; string[ ] output = new string[lines]; for (short i = 0; i < lines; i++) output[i] = input[numbers[i]]; return output; }
|
|
|
|
Ty3uK | Дата: Среда, 20 Июня 2012, 13:50:09 | Сообщение # 196 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| спасибо :3
|
|
|
|
Brut@lus | Дата: Понедельник, 25 Июня 2012, 22:35:41 | Сообщение # 197 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Ty3uK, а этот агрегат возможно поставить на простой WE? Потому что jngp совсем не пашет :<
|
|
|
|
Ty3uK | Дата: Вторник, 03 Июля 2012, 11:19:25 | Сообщение # 198 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Brut@lus, нет, нельзя
Так как на подходе новая бета, я решил привести в порядок страничку на гуглокоде и написал о нововведениях в этой новой бетке. Всех, кто заинтересован - прошу сюда
|
|
|
|
Faion | Дата: Вторник, 03 Июля 2012, 11:44:20 | Сообщение # 199 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| /o\ ну раз речь зашла о говнокоде и правильном подходе, то:
Code string ResultingString = Regex.Replace(StringToCap, @"\w+", new MatchEvaluator(CapitalizeString));
+ StringBuilder
И вообще байтофаги детектед. Это вам не жасс. В дотнете есть автоматическая оптимизация кода. Алгоритмы лучше юзайте человеческие, от этого пользы будет в разы больше.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
Ty3uK | Дата: Вторник, 03 Июля 2012, 11:45:15 | Сообщение # 200 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Faion, ты это к чему?
|
|
|
|