RU

Особенности синтаксиса

Nex Moderator 03.06.2011 07:24 16 comments 13013 views

Здесь обсуждаем особенности синтаксического разбора QSP. Не выполнение команд, а именно алгоритм разбора строки кода на составляющие.

Знак “&” служит для “склеивания” строк, и одновременно для разделения операторов. Это сильно усложняет синтаксический разбор кода, создавая всякие неоднозначности.

Например, вот так писать нельзя:

IF $CURLOC = 'S' & 'A' :
END

А так - можно.

IF $CURLOC = ('S' & 'A') :
END

Наряду со знаком “&”, для “склеивания” строк используется знак “+”. Но приоритет у них разный, поэтому следующие записи приведут к разному результату:

$b = 'ppp' & 'bbb'
$b = 'ppp' + 'bbb'

Первая строка - последовательное выполнение операторов присваивания и вывода на экран, вторая строка - “склейка” строки и запись результата в переменную.

Следующий код выведет разный результат:

('d1' = 'd' + 1)
('d1' = 'd' & 1)

Первая строка:
1. склейка “d” и “1”
2. сравнение, возвращает -1 (истина)
3. вывод “-1”

Вторая строка:
1. сравнение “d1” и “d”, возвращает 0 (ложь)
2. склейка “0” и “1”
3. вывод “01”

То есть лучше писать “and”?

Nex,
С приоритетом операции “&” сейчас ошибка - приоритет должен быть ниже, чем у “+”, но выше, чем у “=“.
Будет исправлено в след. версии.

Byte,
то есть записи станут эквивалентны?

Я бы предпочел, конечно, чтобы “&” использовался только для разделения операторов, иначе действительно очень много путаницы возникает. Это возможно?

Евген,
в эту тему вообще не заглядывай, эти вопросы настолько сложны, что я не в силах тебе их объяснить. Тебе нет нужды интересоваться этим. Чисто техническая тема.

Nex на мой взгляд путаницы нет, если разделять операторы и выражения :)
В операторах это разделитель операторов, в выражениях это объединение строк.

Byte,
на первый вопрос не ответил.

Nex,
нет, у “&” приоритет будет немного ниже, чем у “+”.

Byte,
я спросил конкретно про те строки - они выполнятся с одинаковым результатом?

Последние 2 строки - да.

Byte,
а остальные?

В остальных случаях будет также как было.

Nex:

Наряду со знаком “&”, для “склеивания” строк используется знак “+”. Но приоритет у них разный, поэтому следующие записи приведут к разному результату

Здесь дело не в приоритете, а в разном контексте использования.

В «Документации QSP» в разделе «Выражения» написано:

Для значения “верно” настоятельно рекомендуется использовать -1, т.к. только в этом случае будут адекватно работать побитовые операторы в роли логических.

Я не понимаю, что и в каком случае будет работать неадекватно и почему.

snail:

В «Документации QSP» в разделе «Выражения» написано:

Для значения “верно” настоятельно рекомендуется использовать -1, т.к. только в этом случае будут адекватно работать побитовые операторы в роли логических.

Я не понимаю, что и в каком случае будет работать неадекватно и почему.

Присоиденяюсь к даному вопросу.

Побитовые операторы NO, OR и AND будут работать как логические операторы только для 0 и -1
Например, 1 and 2 = 0

Log in or Register to post comments.