jcxz 241 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба у меня есть мощный камень и такой же язык программирования. и я думаю этих двух условий вполне хватает для решения задачи. тем более что она почти решена. Самое необходимое (и достаточное) условие для решение любой задачи - не мощный камень или язык, а мощная голова... :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба Самое необходимое (и достаточное) условие для решение любой задачи - не мощный камень или язык, а мощная голова... :laughing: это Вы свою имеете ввиду я так понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба Судя по "постановке задачи" ТС, это похоже на интерпретатор бейсика в "онлайн" режиме, когда каждая строка выполняется по энтеру. В PLC системах, один из языков программирования - IL ( Instruction lang.) полностью соотв-ий ассемблеру. Кроме ASM - есть ST - сильно похожий на C Тоисть, ТС не следует изобретать очередной лисапет, а (если задача учебно-тренировочная) разработать свой компилятор ассемблера (включающий парсер) на выходе которого будет сгенерирован машинный код (это будет круто), или промежуточный код (как в Java) - для последующего исполнения вирт. машиной "MyPLC" или текст-код, например например на ASM MSP430 для последующей компиляции "настоящим" компилятором ASM430 и заливки реального кода в процессор, где уже "живет" "Операционная система MyPLC" (тоже круто). Так работают реальные системы разработки для промышленных контроллеров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба о! вот в этом вся загвоздка! вот это я и пытаюсь решить. не то чобы я был зациклен на моей имплиментации. просто других альтернатив нет пока. я думал сделать такую структуру При разработке своего контроллера я подумал побольше и сделал так. Любая логическая функция из N переменных описывается таблицей истинности из 2^N строк. Если переменные пронумерованы, то и на результат можно ссылаться числом. Например, для 5 переменных имеем 32 результата. Зная значения всех 5 переменных, мы можем получить номер бита в 32-битном хранилище результата. В байткодах это выгладит так: TABLE5(result_value) VAR0 VAR1 VAR2 VAR3 VAR4 GETRESULT Компилятор должен преобразовать сложное логическое выражение к таблице истинности и получить правильный resul_value. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 января, 2016 Опубликовано 28 января, 2016 (изменено) · Жалоба честно говоря я мало что понял. Изменено 28 января, 2016 пользователем Herz Избыточное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба мне бы не хотелось уходить в какие то специализированные среды разработки. у меня есть мощный камень и такой же язык программирования. и я думаю этих двух условий вполне хватает для решения задачи. тем более что она почти решена. Я так понял, что у вас задача "програмировать задачи - состояния на выходе в зависимости от условий на входе." в первом посте, а не разработка интерпретатора для своего языка программирования. Среда разработки выше была создана именно с целью решения задачи из вашего первого сообщения. По-моему вы больно ошибетесь, если будете думать, что она "почти решена". Помимо описанного выше - что насчет типов переменных? Как вы собираетесь описывать весь этот язык в документации? Для каких пользователей? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба честно говоря я мало что понял. Вы таблицу истинности представляете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба . По-моему вы больно ошибетесь, если будете думать, что она "почти решена". Помимо описанного выше - что насчет типов переменных? Как вы собираетесь описывать весь этот язык в документации? Для каких пользователей? Просто это типичный случай, который я описал в "Гайке М3". ТС кажется, что как только он "определит гайку", то все остальное получится само по себе. Причем он даже не понимает, что он хочет делать интерпретатор или компилятор... Так же как и не понимает, почему ему хочется обрабатывать сложные скрипты а не простые, обработанные компилятором. Не понимает, что в любом случае, в системе управления будет хост. И еще лучше хост удаленный. А это значит, что валить компиляцию в микроконтроллер - не имеет смысла. А уж его высказывания все это только и подтверждают. Я читаю эту переписку не как техническую, а как пример общения с глухим и диким, не вежливым и ужасно самонадеяным.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба Компилятор должен преобразовать сложное логическое выражение к таблице истинности и получить правильный resul_value. А ТС-у нужны только логические функции? Или и арифметические тоже? Я когда-то давно, когда писал свой типа компилятор ;) ну и парсер выражений для него, реализовал поддержку всех операций, что есть в си (с таким-же синтаксисом). Ничего сложного там нет. Сложно стало когда я попытался сделать ещё фазу оптимизации полученного кода после этого :) У меня в выражениях поддерживались все сишные операции, скобки, переменные (были только численно-логические (только одного типа), или строковые (с меньшим списком операций)), константы числовые/строковые, константы литеральные. Мой компилятор компилил текстовые выражения в байт-код, который выполнялся на этапе выполнения. Это для я делал скриптовый компилируемый на лету после старта ПО язык в одной из своих программ. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба Мой компилятор компилил текстовые выражения в байт-код, который выполнялся на этапе выполнения. Это для я делал скриптовый компилируемый на лету после старта ПО язык в одной из своих программ. :) Об этом объяснено еще пару страниц назад, да только все бесполезно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба честно говоря я мало что понял. Утверждается, что (param1 && input1) || (param2 && (input2 || input3)) соответствует таблица истинности из вложенного файла. Из значений переменных собираем индекс: n = (param1 << 4) + (param2 << 3) + (input1 << 2) + (input 2 << 1) + (input3 << 0); Затем получаем результат: ((0xFEF0EE00) >> n) & 1 Т.е. для вычисления (param1 && input1) || (param2 && (input2 || input3)) нам достаточно знать одно волшебное 32-битное число 0xFEF0EE00. Причем, для меня важным моментом было время вычисления логической функции любой сложности из максимум 5 переменных. При таком подходе оно фиксировано и минимально (не зависит от вида функции и от значений переменных). А самое главное, легко описывается байт-кодом и элементарно вычисляется. Теперь понятно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 января, 2016 Опубликовано 28 января, 2016 (изменено) · Жалоба да. это интересно. но условие (param1 && input1) || (param2 && (input2 || input3)) не статическое, оно может поменяться на скажем (param2 || input3) && (param4 || (input5 || input6)) или скажем переменных будет больше 5 ааа...понимаю.. с ростом параметров наша таблица серьезно вырастает… да. это круто. интересный подход. а как мы заполняем результат функции в true table - 0xFEF0EE00? Изменено 28 января, 2016 пользователем Herz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба да. это интересно. но условие (param1 && input1) || (param2 && (input2 || input3)) не статическое, оно может поменяться на скажем (param2 || input3) && (param4 || (input5 || input6)) или скажем переменных будет больше 5 ааа...понимаю.. с ростом параметров наша таблица серьезно вырастает… да. это круто. интересный подход. а как мы заполняем результат функции в true table - 0xFEF0EE00? При изменении условия меняется и результат. Как вы по условию будете получать "магическое число" - это ваши проблемы. Главное, что это возможно. В моем случае исходный текст компилятором преобразуется в байт код, и в задачи компилятора входит данное преобразование. Насчет логических условий с бОльшим числом переменных могу сказать, что я за долгие годы с такими не встречался (максимум 4). Но кто сказал, что таблицы нельзя каскадировать? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 28 января, 2016 Опубликовано 28 января, 2016 · Жалоба adnega, неужели в наше время, микропроцессорные ресурсы такие ценные, что пришлось так извращаться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 января, 2016 Опубликовано 28 января, 2016 (изменено) · Жалоба При изменении условия меняется и результат. Как вы по условию будете получать "магическое число" - это ваши проблемы. Главное, что это возможно. В моем случае исходный текст компилятором преобразуется в байт код, и в задачи компилятора входит данное преобразование. Насчет логических условий с бОльшим числом переменных могу сказать, что я за долгие годы с такими не встречался (максимум 4). Но кто сказал, что таблицы нельзя каскадировать? ;) оличное решение проблемы. я восхищен, не побоюсь этого слова. правда не знаю смогу ли я победить некоторые недостатки: при 8 параметрах наша таблица станет монструозной програмно получать получать "магическое число" но тем не менее - сильное решение. спасибо. как правильно заметил товарищ jcxz - мощная голова - и можно найти элегантное решение без фортов и джэсонов. Изменено 28 января, 2016 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться