Sou novo na Biblioteca de Gramática de Recursos do GF, mas gostaria de modelar expressões temporais como "ano até a data" e suas variantes ("ano até a data", "ano até agora", "anual", etc.).
Qual parte do discurso seria "ano até a data" e como posso representar "ano até a data" no RGL do GF? "Ano até a data" deve ser um AP, Adv ou uma categoria diferente?
Esta foi minha primeira tentativa:
oper YearToDate : AP = mkAP (mkA "year-to-date") ;
Mas o problema é que isso codifica a frase "year-to-date" como uma string. Isso significa que seus componentes não são modificáveis ("month to date") e não tenho certeza de como contabilizar todas as variantes.
No final das contas, a categoria RGL mais conveniente depende de como você quer usá-la. Se você olhar a sinopse RGL para modificar um CN ("substantivo comum"), verá que tanto AP quanto Adv podem modificar um CN, mas em inglês, eles usarão uma ordem de palavras diferente. Adv é um pós-modificador (casa [na colina]:Adv) enquanto AP é um pré-modificador ([grande]:casa AP). Com base nessas informações, AP é uma escolha melhor.
Para mim, elas parecem entradas lexicais diferentes, e faz sentido que sejam funções diferentes. A palavra "variante" em GF significa variação livre, ou seja, as palavras "ano até a data", "ano até agora" e "anual" são realmente 100% intercambiáveis, e enquanto todas as 3 seriam analisadas, apenas uma delas seria linearizada. Normalmente, você não quer lidar com a variação dessa forma; em vez disso, você tem as palavras como entradas lexicais diferentes na gramática GF, mas um aplicativo externo controla quais tratar como intercambiáveis em qual contexto.
Dito isso, se você quiser ter funções que criem novas variantes de uma palavra base em tempo de execução, isso é definitivamente possível — embora seus exemplos particulares sejam um pouco feios de construir em tempo de execução, você precisa acessar os internos em vez de usar a API RGL. Mas é possível com certeza.
Vou apenas colar um exemplo de gramática aqui. Fique à vontade para pedir esclarecimentos ou indicar se não é o que você procura.
Sintaxe abstrata
Sintaxe concreta
Saída da gramática
Teste no shell GF assim: