jenya7 0 8 декабря, 2022 Опубликовано 8 декабря, 2022 · Жалоба On 12/8/2022 at 4:44 PM, artemkad said: Ну, можно и по-взрослому или еще взрослее или уж совсем хардкор вообще то лично мне это нравиться. у меня куча всего засунуто в xml 🙂 . надо подумать. это уж слишком резкий уход от стандартов 🙂 . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 89 8 декабря, 2022 Опубликовано 8 декабря, 2022 · Жалоба 30 минут назад, jenya7 сказал: но хотелось как то по взрослому А вот и а-ля смесь html c питоном <if условие1> xxx <elif условие2> xxx <elif условие3> xxx <elif условие4> xxx <else> xxx </if> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 8 декабря, 2022 Опубликовано 8 декабря, 2022 (изменено) · Жалоба On 12/8/2022 at 5:12 PM, artemkad said: А вот и а-ля смесь html c питоном <if условие1> xxx <elif условие2> xxx <elif условие3> xxx <elif условие4> xxx <else> xxx </if> это интересно, я даже не подумал в эту сторону. надо поразмышлять. но если закрывающий таг обязателен то я просто могу обязать закрывать каждый if {}. Изменено 8 декабря, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 8 декабря, 2022 Опубликовано 8 декабря, 2022 · Жалоба 13 minutes ago, jenya7 said: это уж слишком резкий уход от стандартов в данном случае это уже не имеет никакого значения, абсолютно никакого )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 89 8 декабря, 2022 Опубликовано 8 декабря, 2022 · Жалоба 1 час назад, jenya7 сказал: но если закрывающий таг обязателен то я просто могу обязать закрывать каждый if {}. Тогда это должно быть что-то типа if условие { xxx else xxx } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 9 декабря, 2022 Опубликовано 9 декабря, 2022 · Жалоба On 12/8/2022 at 6:51 PM, jenya7 said: Я разбиваю выражения на токены Эта часть программы называется лексический анализатор. On 12/8/2022 at 7:00 PM, jenya7 said: переписать парсер токенов? по моему вполне логичный, чё в нем ужасного. А это уже синтаксический анализ. On 12/8/2022 at 7:56 PM, artemkad said: Forth в помощь. Делаешь стек(LIFO) параметров на который по токенам выражения(включая токены скобок и ";") кладешь и анализируешь некие константы(у тебя они уже есть, но надеюсь там enum, а не тупые подстановки препроцессора) отвечающие за тот или иной элемент конструкции. Тут и в последующих сообщениях предлагается реализовать разбор методом рекурсивного спуска Это самый простой для понимания алгоритм, но им можно разобрать далеко не все конструкции реально используемых языков. Хотя тот пример, что приведён в первом сообщении можно, если та часть что спрятана за буквами xxx тоже поддается такому разбору. При реализации на С специально выделять память под стек (LIFO) не нужно, вся информация сохраняется в стеке в виде адресов возврата вызываемых функций и их локальных переменных. Есть и другой способ - не писать самому, а применить программы типа Yacc или bison, которые сгенерируют программу разбора. В любом случае теорию хоть немного придется изучить. Самое простое описание всей этой науки содержится в книге Н. Вирта с названием "Алгоритмы+структуры данных=программы" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 89 10 декабря, 2022 Опубликовано 10 декабря, 2022 · Жалоба 17 часов назад, SSerge сказал: Это самый простой для понимания алгоритм, "Если это присказка - значит дело дрянь"(с)... Если это самое простое, то непонятно как некоторые без этого обходятся некоторые маньяки компиляторостроения, которые без написания своего "жить не могут". Можно без построения массива лексем и АСД? В один проход по мере поступления скрипта не дожидаясь его полной загрузки? Мы ведь вроде говорим про МК у которых оперативка отнюдь не резиновая. В 09.12.2022 в 23:37, SSerge сказал: При реализации на С специально выделять память под стек (LIFO) не нужно, вся информация сохраняется в стеке в виде адресов возврата вызываемых функций и их локальных переменных. Что-то не припомню, что-бы Си контролировал переполнение своего стека. Предпочитаете крашевое завершение в случае если дерево окажется слишком неожиданным? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться