Разработать лексер языка UnrealScript
Есть язык UnrealScript (он же UScript) - используемый в играх семейства Unreal Turnament. Вот его описание http://wiki.beyondunreal.com/UnrealScript (там можно выйти и на спецификацию) - он похож на яваскрипт, но у него очень очень много синтаксических наворотов.
Нужно написать что-то типа парсера-лексера, который на каждый входной файл на UScript выдает про каждую лексему ее вид в выходной текстовый файл. Например, для фрагмента кода:
// called immediately after spawning the roster class
function Initialize(int TeamBots)
{
local GameProfile GP;
local int i, j;
GP = Level.Game.CurrentGameProfile;
Log("DMRosterBeatTeam::Initialized() failed. GameProfile == none.");
}
выплевывала что-то типа
comment: // called immediately after spawning the roster class
keyword: function
ident: Initialize
punct:(
ident:int
ident:TeamBots
punct:{
keyword:local
ident:GameProfile
ident:GP
punct:;
keyword:local
ident:int
ident:i
punct:,
ident:j
punct:;
ident:GP
punct:=
ident:Level
punct:.
ident:Game
punct:.
ident:CurrentGameProfile
punct:;
ident:Log
punct:(
string:"DMRosterBeatTeam::Initialized() failed. GameProfile == none."
punct:)
punct:;
punct:}
punct:}
- чтобы они шли в порядке, в каком идут в файле.
На каком языке оно будет написано - практически не важно.
Интерфейс - коммандной строки (никакого GUi не надо).
Чтобы могла обрабатывать несколько файлов за раз, используя такие параметры коммандной строки: [входнойфайл1] [выходнойфайл1] [входнойфайл2] [выходнойфайл2] ..
Подводные камни: для классов, переменных и язык допускает очень много видов модификаторов - см например http://wiki.beyondunreal.com/Classes
Программа не должна нарушать чужие лицензии (например, содержать в сырцах куски GPL кода, хотя линковаться в LGPL библиотеками - можно).
В заявке обязательно указывать стоимость и срок!