Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как вы делаете разбор текстовых команд?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Аматер
Как вы делаете разбор текстовых команд?
То есть у меня есть команда "давай включим уровень компарации входа 1";10 0x0D
Соответсвенна есть таблица, с crc16 для строк команд. Для входной строки ищется crc16 и потом по ней выбирается соответвующая функция из таблицы.
Правильно ли я сделал или есть лучше решения?
MaslovVG
Цитата(Аматер @ Oct 20 2010, 19:40) *
Как вы делаете разбор текстовых команд?
То есть у меня есть команда "давай включим уровень компарации входа 1";10 0x0D
Соответсвенна есть таблица, с crc16 для строк команд. Для входной строки ищется crc16 и потом по ней выбирается соответвующая функция из таблицы.
Правильно ли я сделал или есть лучше решения?

CRC слишком жесткое условие. а если оператор пропустит одну букву?
Если невозможно свести команды к простым сочетаниям нескольких клавишь. То задача превращается в создание некоего искуственного интелекта по распознаванию текста. Если уж совсем неймется я бы свел к наличию ключевых слов.
AHTOXA
Цитата(Аматер @ Oct 20 2010, 21:40) *
Как вы делаете разбор текстовых команд?


Гляньте вот здесь, может пригодится.
DpInRock
http://ru.wikipedia.org/wiki/Soundex
Очень круто.

Аматер
Цитата(AHTOXA @ Oct 20 2010, 21:14) *
Гляньте вот здесь, может пригодится.


Спасибо, нашел хорошую мысль -

Иметь 4х буквенные сокращения и воспринимать их как цифры. Поиск по ним будет быстрый у меня все равно процессор 32 битный.
для понятности буду делать составные команды -

место применения;действие;параметры...

например

ref1;set;10
cur1;get
flash;clr;0;10

Как вам?

а сокращения по звучанию, это круто, но как то мне кажется ненадежно
AHTOXA
Цитата(Аматер @ Oct 21 2010, 14:53) *
Поиск по ним будет быстрый у меня все равно процессор 32 битный.

У вас там что, мегабитный поток команд? smile.gif Куда торопиться-то? Я там высказал своё мнение, и с тех пор не поменял его: команды должны быть осмысленными.
Цитата(Аматер @ Oct 21 2010, 14:53) *
flash;clr;0;10
Как вам?

Не нравитсяsmile.gif
Аматер
Цитата(AHTOXA @ Oct 21 2010, 12:24) *
У вас там что, мегабитный поток команд? smile.gif Куда торопиться-то? Я там высказал своё мнение, и с тех пор не поменял его: команды должны быть осмысленными.

Не нравитсяsmile.gif

Ну у меня действительно около 300 параметров, которые опрашиваются. В основном утилитой. Изредка через терминал команды посылаются.
А торопится есть куда, потому что проц.занят сильно.

А чем система команд не понравилась?
_Pasha
Цитата(Аматер @ Oct 21 2010, 12:45) *
потому что проц.занят сильно.

Тогда <имя-параметра> <разделитель> <операция> [значение]
Соединить операцию и разделитель получим типа
Код
ref1<100 - это такая запись
ref2> это такое чтение
AHTOXA
Цитата(Аматер @ Oct 21 2010, 15:45) *
Ну у меня действительно около 300 параметров, которые опрашиваются.

Это мелочи. Помните о вреде преждевременной оптимизации? Так вот, интерфейс пользователя - это медленный процесс. И там совершенно не критичны пара сотен команд туда-сюда.
Цитата
А чем система команд не понравилась?

Птичий язык какой-то. А выигрыша - мизер. Входной поток всё равно придётся парсить, разбивать на токены по разделителям. А уж как потом определять, что за команда пришла - сравнением четырёхбайтных значений или побуквенно - дело десятое.

ЗЫ. А для утилиты можно сделать команду, которая выдаёт все параметры списком, и сэкономить на этом гораздо больше.
slanted
Цитата(Аматер @ Oct 20 2010, 19:40) *
Соответсвенна есть таблица, с crc16 для строк команд. Для входной строки ищется crc16 и потом по ней выбирается соответвующая функция из таблицы.
Правильно ли я сделал или есть лучше решения?

Подход имеет право на жизнь. Посмотрите библиотеку gperf - это генератор т.н. "идеальных хешей", т.е. хешей, которые гарантированно не имеют коллизий на заданном наборе входных данных. Соответственно, задача опознания команды сведется к подсчету хэша и одному строковому сравнению.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.