Um idioma específico de domínio (DSL) pode ser localizado (ou seja, traduzido)?
-
20-09-2019 - |
Pergunta
Eu nunca escrevi uma DSL, mas estou considerando -a como um recurso para um novo projeto (hipotético). Seria para os usuários finais poder expressar em conceitos de linguagem natural, como dias da semana entre 10 e 11, exceto na primeira segunda -feira do mês.
Usuários holandeses podem escrever WeekDagen Tussen 10 en 11 Behalve op de Eerste maandag van de maand. Nesse caso, a posição das palavras parece corresponder, mas pode haver expressões em que a posição dos verbos/substantivos etc. pode ser diferente entre os idiomas.
Eu percebo a resposta óbvia (depende). Sou desenvolvedor .NET e considero usar o Boo, mas estou aberto a sugestões. Preciso entender se cada tradução requer reescrever uma parte da implementação (que parte) ou se existe uma maneira de fazer traduções reais, talvez em algum tipo de pré -processador.
Solução
Você não encontrará um tradutor capaz de fazer isso por mais de alguns idiomas (digamos entre um ou dois idiomas e o inglês), especialmente considerando o inglês que poderia ter pelo menos três maneiras de escrevê -lo.
Se você quiser escrever uma DSL, precisa criar as regras de produção primeiro (o que posso você escreve) e depois trabalha em uma maneira de expressá -lo em inglês/holandês/marciano/etc.
Por exemplo: cronograma: = inclusão de quadros [exceção
qual seria:
- Quadro: mês, ano, semana, durante a semana, fins de semana, dias do mês, feriados, etc
- Inclusão: entre, não em, em torno, contendo, etc.
- Exceção: exceto [cronograma], mas não [cronograma], a menos que [cronograma
Você pode se preocupar com um Lexer/analisador que corrige uma gramática específica e a coloca nessa forma de produções.
Estes estão fora do topo da minha cabeça e nem perto, mas devem ser suficientes para começar.
Outras dicas
Um DSL criado com o Ferramentas de linguagem específicas de domínio pode ser localizado. Eles colocam todas as cordas em arquivos .Resx.