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(
obter_variavel(
concatenar(
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.