Editor de restrição

Sintaxe de expressões de restrição

A sintaxe de expressões de restrição é um subconjunto da sintaxe de Ferramentas do LN. É possível fazer expressões de restrição com as seguintes instruções básicas.

Operadores aritméticos

  • * (multiplicação)
  • / (divisão)
  • + (adição)
  • - (subtração)
  • \ (resto após a divisão)
  • & (ligação de matrizes alfanuméricas)

Operadores lógicos:

  • ou
  • e
  • não

Operadores relacionais:

  • = (igual a)
  • > (maior que)
  • >= (maior ou igual a)
  • <> (diferente de)
  • < (menor que)
  • <= (menor ou igual a)
Expressões de domínio

A é {a1,a2,a3-a4,..}, ou seja: (A=a1 ou A=a2 ou A >= a3 e A <= a4 e assim por diante.)

A sintaxe da expressão de domínio é uma notação abreviada para expressões lógicas relativas ao domínio de uma variável.

Prioridade de expressões

Operadores aritméticos tem prioridade maior que operações relacionais.

As últimas têm prioridade maior que os operadores lógicos.

A sequência de prioridade de operadores aritméticos é: * / \ + -

A sequência de prioridade para operadores lógicos é: not, and, or

É possível usar parênteses ("()") para alterar a sequência de prioridade de operadores lógicos e aritméticos.

Exemplo

3 + 4 * 5 = 23

(3 + 4) * 5 = 35

Expressões booleanas

As expressões booleanas podem ter o valor verdadeiro ou falso (1 ou 0). Isso pode ser aplicado nas restrições, especialmente em expressões condicionais.

Exemplo

Se não e então ' significa:

Se e = falso então '

ou Se e = 0 então '

Construções if-then-else

Construções if-then-else abrangentes podem ser usadas em restrições. É permitido o aninhamento de instruções.

Exemplo

Se (if) expressão1,

então (then) expressão2,

caso contrário (else), expressão3

endif

Uma construção if-then-else sempre é encerrada por uma instrução endif. A instrução else não é obrigatória. As instruções if, else e endif sempre iniciam em uma nova linha. Expressões (condicionais) podem ser divididas em várias linhas. A restrição de validação pode ser definida sem instruções if-then-else; essa restrição deve iniciar com c:.

Uma restrição pode ser fornecida com comentários usando o sinal |. Durante o processo de configuração, é possível gerar mensagens utilizando a mensagem de variável (até 80x25 linhas de texto).

Variáveis de restrição

Tanto variáveis globais como locais podem ser usadas em expressões de restrição. As variáveis globais são as características do produto e as variáveis de restrição definidas pelo usuário que são declaradas como globais. As variáveis predefinidas pelo configurador de produto, como a entrada, exibição, comprimento, largura e assim por diante, são locais. As variáveis globais mantêm seu valor ao longo do processo de configuração, a menos que seus valores sejam alterados.

Uma variável de restrição pode ter os seguintes tipos de declarações:

  • string (alfanumérico) (por exemplo: string máquina global)
  • long (números inteiros) (por exemplo: long i)
  • double (frações) (por exemplo: double j)

As variáveis de restrição definidas pelo usuário sempre devem ser declaradas no topo da restrição. Todas as variáveis locais são inicializadas antes da execução da restrição: as variáveis alfanuméricas são limpas e as numéricas recebem o valor zero. A entrada e validação de variáveis globais são inicializadas com o valor true.

Uso de variáveis de restrição

As características do produto devem ser fornecidas com abrir e fechar de colchetes ([......]) nas expressões de restrição. As demais variáveis podem ser usadas diretamente em expressões. Variáveis alfanuméricas (matrizes de cadeia de caracteres) podem ser indexadas de acordo com a notação: (posiçãoinicial[;comprimento]).

Exemplo

[cor] = “vermelho”

validação = true

Os valores das variáveis podem ser alfanuméricos ou numéricos. Os valores alfanuméricos devem ser escritos entre aspas ("...."). Os valores numéricos podem ser inseridos diretamente. O separador decimal é uma vírgula (‘,').

Exemplo

máquina(1;2) = "A5"

volume = 28,673

As constantes true/false podem ser usadas para expressões booleanas.

Funções aritméticas
  • round(X,Y,Z): produz o valor arredondado de X; Y é o número de casas decimais e Z é método de arredondamento (0 = para baixo, 1 = normal, 2 = para cima)
  • val(A): produz um valor numérico da sequência de caracteres A (val(“8.7") = 8.7)
  • abs(X): calcula o valor absoluto de X (abs(-10.3) = 10.3)
  • int(X): produz o valor inteiro de X (int(11.6) = 11)
  • pow(X,Y): eleva X à potência de Y (pow(10,2) = 100)
  • sqrt(X): produz a raiz quadrada de X (sqrt(16) = 4)
  • min(X,Y): produz o menor valor de X e Y (min(6,10) = 6)
  • max(X,Y): produz o maior valor de X e Y (max(6,10) = 10)
  • pi: constante com o valor de pi (3,1415926...)
Funções goniométricas
  • sin(X), cos(X), tan(X) : produz seno, cosseno ou tangente de X (radiais)
  • asin(X), acos(X), atan(X): produz arco seno, arco cosseno ou arco tangente de X
  • hsin(X), hcos(X), htan(X): produz seno, cosseno ou tangente hiperbólico de X
Funções logarítmicas
  • exp(X): eleva e à potência de X
  • log(X): produz o logaritmo natural de X com base em e
  • log10(X): produz o valor logarítmico de X com base nas potências de 10
Funções de sequência de caracteres
  • edit(X,Y): formata o valor numérico de X de acordo com o formato de Y (edit(10.3,"ZZZ9V.99") = “10.30"
  • str(X): coloca o valor numérico na sequência de caracteres (str(10.3) = “10.3")
  • len(X): produz o comprimento da sequência de caracteres X (len("abc") = 3)
  • strip(X): exclui espaços após o último caractere (strip("A ") "A")
  • pos(X,Y): produz a posição da sequência de caracteres Y em uma sequência de caracteres X da esquerda
  • rpos(X,Y): produz a posição da sequência de caracteres Y em uma sequência de caracteres X da direita
Funções de data
  • date(): produz o número de dias entre o dia 0 e a data atual
  • date(y,m,d): produz o número de dias entre o dia 0 e a data inserida
Exemplo

date(1995,06,01) = 728445