DELPHI. Класс Tparser. Часть I. Русские буквы и слова.
Запись от antikiler_ размещена 06.11.2012 в 17:33
Показов 16286
Комментарии 4
Метки delphi
Как известно, в Дельфи имеется служебный недокументированный класс TParser - лексический анализатор. Основное его предназначение это разбор *.dfm файлов Дельфи. Но он, так же может работать с любым текстом, при этом он разбирает его на свои лексемы - слова, числа(простые, вещественные), знаки препинания,служебные символы. Вот как он это делает
но если символ показан в кодировке Unicod'a то все ок. Есть несколько решений как заставить TParser разбирать русские слова. Например можно склеивать их при разборе
Все делалось в Дельфи 2010.
Нас интересует эти две строки
Но это, ещё не все. TParser пока не может понять слова через дефис. Если Вам такое не подходит, продолжаем "мучить" Classes.pas. Переходим на строку 9693. И изменяем строку
Вот и все. При данном изменении(напрямую), пока не наблюдалось каких-либо ошибок компилятора. Способ, конечно не совсем правильный. Но делать класс от Tparser, и замещать его методы не получится, т.к. нам необходимо доступ к полям и методам в секции private, а это возможно только если дочерний класс находится в том же модуле, что и родительский класс. Можно скопировать полностью Tparser в другой модуль, изменить все необходимое, и пользоваться ним, что будет конечно гораздо правильнее. Полезные ссылки: Как работать с Tparser Интерпретатор на коленке на основе TParser Использование TParser Недокументированный TParser Простое использование TParser Cинтаксический анализатор арифметических выражений на основе Tparser - а вот к этой статье Я вернусь во торой части, т.к. есть ошибки | ||||||||||||||||||||||||||||||
Метки delphi
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 4
Комментарии
-
Запись от snake32 размещена 06.11.2012 в 17:40
-
Рад помочь
.Запись от antikiler_ размещена 06.11.2012 в 17:50
-
Запись от Alex_pac размещена 10.11.2012 в 05:18
-
Все его методы объявленны как статические. А необходимая нам метод для правкинаходится в секции private,который в свою очередь использует поля из той же секции.Delphi 1
function CharType(var ABufPos: Integer): TCharType;
Так и есть. Например слово может состоять из букв и цифр(!), но начинаться на букву или символ подчеркивания ( _ ), во общем как и индетификатор в дельфи.
. Но при необходимой сноровки - это можно обойти...
Думаю, что все зависит от поставленной задачи и оптимальных методов ее достижения(чем проще - тем лучше, плюс -чем удобней
)...Запись от antikiler_ размещена 12.11.2012 в 17:10

.
