ужасы нашего городка |
[Feb. 8th, 2013|07:00 pm] |
от тоски и больных зубов сделал к AngelScript патчик на предмет восьмиричных и двоичных числовых литералов. умилился способу парзинга. вот вы думаете, есть tokenizer, он бьёт входной поток на токены и… и? и да — но частично. собственно, токенизатор лупит поток на совсем базовые штуки типа «пробелы», «камент», «какое-то число», «какая-то строка», «какой-то идентификатор», «какая-то марсианская инфекция» и передаёт это в виде «тип, позиция во воходном потоке, длина». а lexer… вмонтирован в компилятор и парзер (которые тоже не очень чётко разделены), где как получилось. где GetToken(), где нечто вроде ScanNumber() прямо посреди пустыни…
не врубился в причины столь странного кода. всегда писал Как Учили Отцы: scanner сканит, выделяет смысловые закорючки; lexer лексит закорючки в токены; parser парзит конструкции и вызывает codegen (или строит AST). зачем вместо простого типа токена и опционально простого же payload'а всегда кидаться кусками входного потока, после чего делать работу lexer'а где получится — не понимаю. хотя причина была, наверное — я весь код не читал, я так, по верхам прошёлся.
и, конечно, в AngelScript нет лямбд и замыканий. это прискорбно. возможно, в AngelScript3 будут. |
|
|