Комментарии 23
Если к этому добавить еще и невыразительность языка C++, например методы stoi(), stod(), empty()
Это не С++.
По поводу статьи:
Вы изобрели lex и yacc.
Хуже. Автор написал этот код вручную, когда мог использовать lex/yacc, чтобы получить исходники парсера. Кроме того, как уже писали выше, для арифметики есть обратная польская запись (Reversed Polish Notation - RPN).
поскольку адекватный разработчик ... с использованием существующих решений (языки C, C++) вряд ли будет.
Если к этому добавить еще и невыразительность языка C++
Поэтому далее мы напишем программу на... (барабанная дробь) C++.
Если уж решили писать разбор синтаксиса какого-то кода на с++, то используйте также наследование и полиморфизм, а не пачки switch caseов. И как верно уже сказали - вы переизобрели flex + bison / lex + yacc. И, кстати, дерево выражение не всегда бинарное. Например if (expression) { statements } else { statements } имеет три листа.
Про мусор в начале статьи я уж и не говорю.
Блин, плюсанул, почти не читая, особенно вступление. Извините. А еще говорят, что на хабре много минусуют. Видимо, я какая-то аномалия, раз неоднократно плюсую сомнительные статьи из-за добрых побуждений.
На втором курсе на ассемблере написал программу, которая с клавиатуры считывала строку с формулой и и числами и преобразовывала это все соотв вызовы. Поддерживались комплексные числа (ради них эта прога и писалась, т.к. вручную считать лабы и курсачи по ТОЭ задалбывался).
Это был 1992 год. Компьютер БК-0010.01, архитектура PDP-11. И про интернет я еще не знал.
Кода хуже я не видел никогда
Народ, соберитесь.
Увидел оценку, прочитал первый абзац, и сразу в коментарии - а тут как-то тухловато. Болеют все, что ли?
Можно пойти ещё дальше и реализовать полноценную data-flow диаграмму, которая также прекрасно помещается в линейный список. Дополнительным бонусом к этому будет возможность у функций иметь не только несколько входов, но и несколько выходов, а также возможность прозрачной реализации «грязных» функций, то есть с внутренним состоянием (типа линий задержек, фильтров, связи с внешним миром и т.д.).
Вам бы, сударь, в Комсомольской правде печататься)
С чего начинается программирование? С простановки задачи. В вышеописанном контексте задачей является управление работой процессора посредством трансляции набора команд. Вообще производитель любого процессора уже решил эту задачу, предоставив потребителю спецификацию с набором поддерживаемых процессором команд. Такая спецификация содержит инструкции (команды) ассемблера и, возможно, рекомендации по использованию этих инструкций.
Что такое, товарищи, дебют и что такое, товарищи, идея?Дебют, товарищи, это quasi una fantasia. А что такое, товарищи, значит идея? Идея, товарищи, – это человеческая мысль, облеченная в логическую шахматную форму.
Вы просто взяли и пересказали первые главы любой книжки по написанию компиляторов, и даже не упомянули, что грамматика записана в форме Бэкуса-Наура
Алгоритм распознания арифметических выражений