Re[4]: Лучший язык на свете
От: Слава  
Дата: 30.10.17 20:40
Оценка: +2
Здравствуйте, QrystaL, Вы писали:

QL>Это было бы гораздо практичнее и ближе к народу, чем конструктор языков, нужный 0,0..01% сообщества


Конструктор языков на самом деле нужен. Существует немало разного рода систем с чрезвычайно развесистыми средствами конфигурирования. Для примера, Freeswith, сервис телефонии. У него есть диалплан, который предлагается писать в XML. Типичная структура логики там — это навешивание коллбэков на коллбэки и указание кучи параметров для функций, которые будут вызваны по ходу звонка

  Звонок с записью разговора
<extension name="out_sipmarket.net">
    <condition field="${toll_allow}" expression="domestic"/>
    <condition field="destination_number" expression="^(7\d{10})$">
      <action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/>
      <action application="set" data="RECORD_COPYRIGHT=(c) 2012"/>
      <action application="set" data="RECORD_SOFTWARE=FreeSwitch"/>
      <action application="set" data="RECORD_ARTIST=FreeSwitch"/>
      <action application="set" data="RECORD_COMMENT=Voice recordings"/>
      <action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/>
      <action application="set" data="RECORD_STEREO=true"/>
      <action application="set" data="media_bug_answer_req=true"/>
      <action application="set" data="recordingfile=${uuid}.wav"/>
      <action application="record_session" data="$${rec_dir_custom}/${recordingfile}"/>
      <action application="set" data="hangup_after_bridge=true"/>
      <action application="set" data="bride_early_media=true"/>
      <action application="set" data="ringback=${ru-ring}"/>
      <action application="set" data="instant_ringback=true"/>
      <action application="bridge" data="{absolute_codec_string=PCMA,PCMU}sofia/gateway/sipmarket.net/+$1"/>
      <action application="answer"/>
    </condition>
  </extension>
Обратите внимание на код. В нём — ошибка, но о ней никто не подскажет, потому что нет возможности проверить корректность диалплана в целом:
<action application="set" data="bride_early_media=true"/>


  Вызов random
<action application="set" data="rand_val=${expr(randomize(&x);ceil(random(0,100,&x)))}"/>


  Установка коллбэка на начало разговора — запланировать завершение разговора через 60 секунд
<action application="set" data="execute_on_answer=sched_hangup +60" />



  Звонок на номер 1001, если через 10 секунд не ответил — звонить еще и на 1002
<action application="bridge" data="user/1001@${domain_name},[leg_delay_start=10]user/1002@${domain_name}"/>

И код это не работает, разумеется, потому что (внимание! фирменный линуксоидно-инженерно-связистский фокус-покус! крррррр-чпокЪ — вуаля!)

If you want to route to many user channels, you will have to seperate them by :_: as opposed to the comma "," to have an originate for each user


Видите ли, нужно использовать ":_:". ":_:", Карл! Вы давно видели оператор ":_:"?


И так у них всё. Потому что мозги телефонные совершенно не сведущи в парсерах и CS вообще и не в состоянии написать нормальный язык и парсер к нему.

Нитра могла бы стать хорошим лекарством для таких проектов, чтобы привести их конфигурации в нормальный вид.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.