Перейти к содержанию
    

Проиндексировать if-then-else

On 12/8/2022 at 4:44 PM, artemkad said:

Ну, можно и по-взрослому

или еще взрослее

или уж совсем хардкор

:dash2:

вообще то лично мне это нравиться. у меня куча всего засунуто в xml 🙂 . надо подумать. это уж слишком резкий уход от стандартов 🙂 .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, jenya7 сказал:

но хотелось как то по взрослому

А вот и а-ля смесь html c питоном

<if условие1>
  xxx
<elif  условие2>  
  xxx 
<elif  условие3>  
  xxx 
<elif  условие4>  
  xxx 
<else> 
  xxx 
</if>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 {}.

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, jenya7 said:

это уж слишком резкий уход от стандартов

в данном случае это уже не имеет никакого значения, абсолютно никакого ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jenya7 сказал:

но если закрывающий таг обязателен то я просто могу обязать закрывать каждый if {}.

Тогда это должно быть что-то типа

if условие
{
	xxx
else
	xxx
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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, которые сгенерируют программу разбора.

 

В любом случае теорию хоть немного придется изучить.

Самое простое описание всей этой науки содержится в книге Н. Вирта с названием "Алгоритмы+структуры данных=программы"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, SSerge сказал:

Это самый простой для понимания алгоритм,

"Если это присказка - значит дело дрянь"(с)... Если это самое простое, то непонятно как некоторые без этого обходятся некоторые маньяки компиляторостроения, которые без написания своего "жить не могут".

Можно без построения массива лексем и АСД? В один проход по мере поступления скрипта не дожидаясь его полной загрузки? Мы ведь вроде говорим про МК у которых оперативка отнюдь не резиновая.

В 09.12.2022 в 23:37, SSerge сказал:

При реализации на С специально выделять память под стек (LIFO) не нужно, вся информация сохраняется в стеке в виде адресов возврата вызываемых функций и их локальных переменных.

Что-то не припомню, что-бы Си контролировал переполнение своего стека. Предпочитаете крашевое завершение в случае если дерево окажется слишком неожиданным?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...