Pular para conteúdo

DScript

O DScript eh uma linguagem de dominio especifico (DSL) criada pela datagoal para executar operacoes em um questionario, como preencher questoes, validar respostas, etc. Ele pode ser utilizado para automatizar tarefas e criar fluxos personalizados.

A linguagem foi definida usando ANTLR4. Abaixo esta a gramatica completa do DScritp:

grammar DScript;

program: statement* EOF;

statement:
    ifStatement
    | functionCall
    | WS;

ifStatement:
    'SE' '(' factor ')' 'ENTAO' 
    thenBlock=block
    ('SENAO' elseBlock=block)?
    'FIMSE';

functionCall:
    functionName=ID '(' functionArgs=function_arguments ')';

function_arguments: function_argument? (',' function_argument)*;

function_argument: ID | STRING_LITERAL | factor | array_literal;

array_literal: '[' (function_argument (',' function_argument)*)? ']';

block:
    statement*;

factor:
    NUMBER
    | ID
    | STRING_LITERAL
    | functionCall
    | '(' factor ')';

WS: [ \t\r\n]+ -> skip;
ID: [a-zA-Z_][a-zA-Z_0-9]*;
NUMBER: [0-9]+ ('.' [0-9]+)?;
STRING_LITERAL: '"' .*? '"';

Observacoes:

  • key e variavel sao sinonimos no contexto do dscript

As funções existentes no DScript são:

valor(<key da questao>): Retorna o valor respondido para a questão com a key especificada. Nunca usar para questoes do tipo aberta (OpenQuestion), pois para essas questoes nao ha um valor definido, e sim uma resposta aberta, entao para questoes abertas deve ser usada a funcao resposta ao inves de valor.

resposta(<key da questao>): Similar a valor, mas retorna o label da resposta do usuario ao invés do valor, no caso de perguntas escolha unica e escolha multipla. Por exemplo, se a questão for "Qual sua cor favorita?" e as opções forem "1 - Vermelho", "2 - Azul", "3 - Verde", e o usuario responder "2", valor("cor_favorita") retornaria "2", enquanto resposta("cor_favorita") retornaria "Azul".

resposta(<key da questao>, <label da opcao>): Para perguntas abertas (class_name = OpenQuestion) retorna a resposta aberta informada na opcao da questao. Por exemplo, se existir a questao com key = formulario e nela uma opcao com label = idade, resposta("formulario", "idade") retornaria a resposta do usuario para a opção idade

preencher(, ,

definir_variavel(, ): Define uma variavel com o nome e valor especificados, que pode ser utilizada posteriormente no script.

obter_variavel(): Retorna o valor da variavel com o nome especificado.

concatenar(, , ...): Concatena os valores fornecidos e retorna o resultado.

esta_em(<valor>, <nome da lista>): o DScript permite definir listas de valores, e a funcao esta_em verifica se um valor esta presente em uma lista especificada.

impedir_avanco(<mensagem>): Impede o avanço para a próxima questão e exibe a mensagem fornecida ao usuário.

probabilidade_ponderada(<array de probabilidades>): retorna um valor aleatorio que corresponde ao indice de um dos valores do array de probabilidades respeitando a probabilidade informada como valor de cada indice. Por exemplo, probabilidade_ponderada([0.5, 0.3, 0.2]) retornaria 0 com 50% de chance, 1 com 30% de chance e 2 com 20% de chance.

E(<valor1>, <valor2>, ...): operador lógico "E" que retorna verdadeiro se todos os valores fornecidos forem verdadeiros.

OU(<valor1>, <valor2>, ...): operador lógico "OU" que retorna verdadeiro se pelo menos um dos valores fornecidos for verdadeiro.

NAO(<valor>): operador lógico "NAO" que retorna verdadeiro se o valor fornecido for falso, e falso se o valor for verdadeiro.

MAIOR_QUE(<valor1>, <valor2>): operador de comparação que retorna verdadeiro se o valor1 for maior que o valor2.

MENOR_QUE(<valor1>, <valor2>): operador de comparação que retorna verdadeiro se o valor1 for menor que o valor2.

MAIOR_IGUAL: operador de comparação que retorna verdadeiro se o valor1 for maior ou igual ao valor2.

MENOR_IGUAL: operador de comparação que retorna verdadeiro se o valor1 for menor ou igual ao valor2.

IGUAL(<valor1>, <valor2>): operador de comparação que retorna verdadeiro se o valor1 for igual ao valor2.

DIFERENTE(<valor1>, <valor2>): operador de comparação que retorna verdadeiro se o valor1 for diferente do valor2.

VALOR_OU(<valor>,<default>): retorna o valor se ele for verdadeiro, caso contrário retorna o valor default fornecido.