Это всё оптимизации. А меня интересует подход в принципе.
Это как раз не оптимизация, а использование иного алгоритма, не требующего терабайтов памяти тупого перебора в лоб.
И дальше надо бы делать синтаксический/грамматический анализ предложения, однако как его делать - в школьных учебниках русского языка не пишут
Да бросьте Вы, чего там определять? Если на конце вопросительный знак, значит предложение вопросительное. Восклицательный значит побудительное. Вы опять тонете в потоке - формализируйте и все. Да, критериев много, но сами критерии в большинстве случаев возможно определять независимо и по вполне понятным правилам.
Для написания программы такой низкий уровень формализованности алгоритма как-то не придаёт вдохновения.
Строго по этому каждая отрасль деятельности в целях описания процессов использует во-первых, свою терминологию. Во-вторых, свои методики описания. Чего-то никто технические процессы не описывает просто литературным языком а-ля Толстой. Для этого внезапно используются диаграммы. Но Вы почему-то решили, что можно неточным текстом написать программу. Я думаю возможен компромисс между специализацией и естественной записью, но не возможна целиковая естественная запись программ.
Для написания программы такой низкий уровень формализованности алгоритма как-то не придаёт вдохновения.
Даже школьник читая задачу прежде всего занимается её преобразованием в формальный вид (Дано и т.д.). Иные варианты невозможны - так устроена наша знаковая система, так устроен мозг человека. Каждое улучшение неизбежно рождает специализацию - либо свои формальные знаки (как UML или язык программирования) либо свои термины (как латинский в медицине).
Какие классы объектов должны быть результатами такого анализа?
Это зависит от устройства языка. В В-2 конструкции текста переводятся во внутренне представление вида:
ID
param1
param2
param3
param4
То есть код команды и ее параметры. Почти как ассемблер (только параметры высокоуровневые). Чем не вариант? Берите за идею и пользуйтесь на здоровье. Зачем Вам строка текста? Вам нужны команды для исполнения, а сиреневый или сиреневенький это для эстетов.
Как они должны быть связаны между собой?
Как описание действия и совокупность данных, необходимых для выполнения данного действия.
Как должен движок связывать объекты этих классов на основе правил Уткина?
У Вас нет ответа только по одной причине - Вы всегда любите проводить процесс, ради процесса. Вы должны думать как добиться результата. Вам нужен результат работы, а не описание процессов. Именно попытка получить результат и должна приводить к цепочке описаний процессов. Но никак не наоборот. Зачем Вам проводить морфологический разбор? Вот зачем? Вы должны упаковать запись вида:
"Хочу в переменную А занести число 5"
в структуру
ID 0
param1 A
param2 5
param3
param4
На следующем этапе компилятор должен брать эти структуры и преобразовывать их в команды ассемблера. То есть: ID 0 значит это команда MOV, А значит найти в таблице переменных адрес ячейки. 5 - значит получить правильное представление числа из символьного представления. Вот какой маршрут должен быть.
Как записывать правила Уткина (примеры записи таких правил где?).
Да как угодно, только не мозголомно. Зачатки такой системы это файл описания синтаксиса В-2. Там есть конструкция - описание шаблона предложений и связь с ID - идентификатором конструкции. Конечно это не готовая универсальная система, это только проба пера - практический зачаток работ в данном направлении. Но просто в качестве примера, что это возможно. Нужно осмыслить, и выработать лучший результат.
Ну вот фрагмент файла:
Шаблон
Описание=Точка старта системы как самостоятельного компонента
№=4
Слово1=Пуск
Слово2=:
Слово3=1
Шаблон
Описание=Точка старта системы как самостоятельного компонента
№=4
Слово1=Пуск
Слово2=1
Он говорит нам о том, что имеется как минимум два вида предложений:
Пуск функция
Пуск: функция
Выполняют одно и тоже действие. Возможно стоит взять такой вариант за основу и немного расширить его. Это и есть та связь между предложением, анализом этого предложения и действием, которое следует исполнять в данном случае.
Кстати, если задать так:
Шаблон
Описание=Точка старта системы как самостоятельного компонента
№=4
Слово1=Пуск Старт
Слово2=:
Слово3=1
То мы получаем две конструкции вида:
Пуск: функция
Старт: функция
Это образец реализации ровно той схемы, которую Вы предлагаете - перебор инструкций в лоб. В В-1 был такой синтаксический сахар:
Создать переменную
Создаем переменную
Добавить переменную
Добавляем переменную
Или как-то так.
Рождение В-1: http://rus.24bb.ru/viewtopic.php?id=36&p=3
ЗЫ. Я так и не пойму почему Вы пытаетесь все время провести классификацию, построить типономику слов в предложении? Что это дает Вам для разбора текста?
Отредактировано utkin (2018-02-20 12:11:16)