0
Написание скриптов
Подскажите где можно взять описание компилятора (в частности Basic) и перечень операторов поддерживаемых компилятором?
Сервис поддержки клиентов работает на платформе UserEcho
Сервис поддержки клиентов работает на платформе UserEcho
Синтаксис BasicScript
[spoiler]
Program -> Statements
Statements -> (EOL | StatementList EOL)…
StatementList -> Statement/':'…
ImportStmt -> IMPORTS (String/,)…
DimStmt -> DIM (VarDecl/',')…
VarDecl -> Ident [Array] [AsClause] [InitValue]
AsClause -> AS Ident
Array -> '[' ArrayDim/','… ']'
ArrayDim -> Expression
InitValue -> '=' Expression
Expression -> SimpleExpression [RelOp SimpleExpression]…
SimpleExpression -> ['-'] Term [AddOp Term]…
Term -> Factor [MulOp Factor]…
Factor -> Designator
-> UnsignedNumber
-> String
-> '(' Expression ')'
-> NOT Factor
-> NewOperator
-> '<' FRString '>'
SetConstructor -> SetNode/','…
SetNode -> Expression ['..' Expression]
NewOperator -> NEW Designator
RelOp -> '>'
-> '<'
-> '<='
-> '>='
-> '<>'
-> '='
-> IN
-> IS
AddOp -> '+'
-> '-'
-> '&'
-> OR
-> XOR
MulOp -> '*'
-> '/'
-> '\'
-> MOD
-> AND
Designator -> [ADDRESSOF] Ident ['.' Ident | '[' ExprList ']' | '(' [ExprList] ')']…
ExprList -> Expression/','…
Statement -> BreakStmt
-> CaseStmt
-> ContinueStmt
-> DeleteStmt
-> DimStmt
-> DoStmt
-> ExitStmt
-> ForStmt
-> FuncStmt
-> IfStmt
-> ImportStmt
-> ProcStmt
-> ReturnStmt
-> SetStmt
-> TryStmt
-> WhileStmt
-> WithStmt
-> AssignStmt
-> CallStmt
BreakStmt -> BREAK
ContinueStmt -> CONTINUE
ExitStmt -> EXIT
DeleteStmt -> DELETE Designator
SetStmt -> SET AssignStmt
AssignStmt -> Designator ['+'|'-'|'*'|'/']'=' Expression
CallStmt -> Designator ['+''+'|'-''-']
ReturnStmt -> RETURN [Expression]
IfStmt -> IF Expression THEN ThenStmt
ThenStmt -> EOL [Statements] [ElseIfStmt | ElseStmt] END IF
-> StatementList
ElseIfStmt -> ELSEIF Expression THEN
(EOL [Statements] [ElseIfStmt | ElseStmt] | Statement)
ElseStmt -> ELSE (EOL [Statements] | Statement)
CaseStmt -> SELECT CASE Expression EOL
(CaseSelector…) [CASE ELSE ':' Statements] END SELECT
CaseSelector -> CASE SetConstructor ':' Statements
DoStmt -> DO [Statements] LOOP (UNTIL | WHILE) Expression
WhileStmt -> WHILE Expression [Statements] WEND
ForStmt -> FOR Ident '=' Expression TO Expression [STEP Expression] EOL
[Statements] NEXT
TryStmt -> TRY Statements (FINALLY | CATCH) [Statements] END TRY
WithStmt -> WITH Designator EOL Statements END WITH
ProcStmt -> SUB Ident [FormalParameters] EOL [Statements] END SUB
FuncStmt -> FUNCTION Ident [FormalParameters] [AsClause] EOL
[Statements] END FUNCTION
FormalParameters -> '(' (FormalParam/',')… ')'
FormalParm -> [BYREF | BYVAL] VarList
[/spoiler]
Структура BasicScript
[spoiler]
#language BasicScript // опционально
imports "unit1.vb", "unit2.vb"
// раздел imports - должен быть перед любым другим разделом
dim i, j = 0 // раздел переменных - может быть в любом месте
function p1() // функции
{ //
}
// главная исполняемая функция.
for i = 0 to 10
p1()
next
[/spoiler]
Но видимо у меня не хватает знаний в нем разобраться.
Прошу указать где об этом можно более подробно узнать.
Спасибо!
Прошу прощение за задержку с ответом. Опишите подробней что именно Вы хотите уточнить? Синтаксис языка Basic?
То, что выложено под спойлерами - тёмный лес, поверьте.
Хочется видеть что-то такое. Это хелп из другой скады.
BitAnd
Описание
Выполнить операцию побитового AND между Value1 и Value2
Синтаксис
int BitAnd(int Value1, int Value2)
Параметры
Value1 = первое обрабатываемое число
Value2 = второе обрабатываемое число
Возвращаемое значение
Результат операции Value1 AND Value2
Связанные функции
BitOr(), BitXor(), BitNot()
Пример
int Result;
int Value1;
int Value2;
Value1=HexStrToInt("0xFFA7");
Value2=HexStrToInt("0x0FF5");
Result=BitAnd(Value1,Value2);
В результате получится 0xFA5
Понятно, что сваять подобный хелп, да ещё с примерами на четыре языка - серьёзная работа. Но даже наличие простого списка со всеми функциями, операторами и что там ещё бывает, очень поможет. Со всеми, в том числе if… then, for… next, < > и т.д. Иначе возникает дурацкая ситуация, когда изрядно порывшись в интернете, пишешь скрипт, а он не работает, поскольку какая-то функция здесь не поддерживается.
Я в конечном итоге решил свою задачу.
Но это потребовало уйму времени - которого не хватает и всегда жаль тратить на "долбешку головой об стену".
Вынужден присоединиться к теме.
Не могу удержаться - "брошу свой камень".
Документация не самая сильная сторона вашей замечательной системы.
Скачал примеры с http://simplight.ru/news/118-05-05-2015-sl-4-4.
Что могу сказать, те примеры которые можно скачать на странице, они такие … примеры, что просто "…кушать не могу …"
Нет, они очень даже хорошие примеры, НО:
1) как я могу оценить работу примера, если база пуста, и какие даты не вводи - все равно получишь 0 (можно было бы разместить еще одну кнопочку, которая бы запускала скрипт, который заполнял бы базу значениями для полноценной работы примера - заодно и хороший пример того, как записывать данные в базу - лично для меня сейчас это актуальная задача)
2) хорошо, вы скажите, что пример приведен просто для того, что посмотреть как писАть скрипты. Отлично. Посмотрел. Что вижу? функцию GetOperationTimeValueFromDB. Заинтересовался, что за функция-процедура. И … ничего не нашел. А нету никакой информации про нее. НЕТУ!
Вы знаете. Я из программистов. Из бывших. Ну в том смысле, что давно ушел из большого спорта. Я смогу понять из описания по CTRL+SPACE про что эта функция. Но вы знаете, программисты - они такие фантазеры, что никакая фентези и рядом не стояла.
Уважаемые разработчики, ну сделайте пожалуйста простой файлик (в смысле pdf-файлик) с описанием всех функций процедур, что бы мы точно знали, что ожидать от этих функций. Ну а если там же привести примерчики (с пояснениями, а то в примерах ну ни одного коммментария, просто ахтунг!) основных задач (как считать канал, как считать в exel канал за определенной время, как записать в базу значения за определенное время, … и т.д.), то цены вам не будет во веки веков. Аминь!
С уважением, Кондратенко Анатолий
Новочеркасск
Успехов! Удачи! Терпения в общении с нами, пользователями. :)
Спасибо за Ваши замечания. Да, на примеры и написание справок не всегда хватает времени и ресурсов, причем с примерами ещё не все так плохо, а вот с написанием справки дела обстоят интересней)) но мы исправимся. Для начала давайте мы сделаем более удобное описание внутренних процедур и функций SIMP, с описанием и примерами, оформим в pdf. Будем тогда выкладывать промежуточные варианты сюда на обсуждение. Как Вам такой вариант?
:woohoo:
Занимался я тут вопросом записи в базу данных произвольных значений с помощью SaveChannelToDB.
Получил необычные результаты.
Долго разбирался пока не заподозрил неладное.
Проверил эту догадку - и действительно - запись в базу данных вовсе не изменяет имеющееся там значение (как я ожидал), а просто кидает еще одно значение. Примерно так:
10.06.2015 2:00:00 33
10.06.2015 2:00:00 77
Так и должно быть? :unsure:
Или есть еще какие-то варианты ?
С уважением, Кондратенко Анатолий
Новочеркасск
Все верно, текущий движок БД, не позволяет ни менять не редактировать данные находящиеся в базе, по этой причине и происходит наложение временных меток друг на друга. Какие есть варианты, мм…скорей всего контролировать в скрипте временную метку при записи. БД, давно просится в переработку, как руководство даст отмашку, займемся этим вопросом. На сколько знаю планируют два вида БД на выбор при установке, внутренняя БД или SQL БД.
А зачем? Что мне это даст, если изменить имеющееся там значение я не могу.
Или Вы имели ввиду то, что с помощью этой проверки можно не допустить запись в базу другого значения с такой же временной меткой?
Да, именно это, не допустить дублирования временных меток. Изменить существующую запись повторюсь на данный момент нельзя.
p.s. Анатолий, можете рассказать какую задачу решаете?
В Delphi (паскаль) поддерживается синтаксис: #10 - конец строки и #13 - код возврата каретки (переноса строки). В Симплайте такое возможно для вывода сообщения, к примеру, в две строки?
Код WriteValue('Таймер', 'Работа'+#10+#13+d+' дн. '+h+' ч.'+m+' м.'+s+' с.') ошибок при компиляции не выдал, но текст отразил в одну строку.
Компоненты мнемосхем в SIMP не поддерживают многострочный вывод текста. Добавим в лист доработок.