Como lidar com valores lista de retorno em ANTLR
-
09-09-2019 - |
Pergunta
O que é a maneira correta de resolver este problema em ANTLR:
Eu tenho uma regra de gramática simples, digamos, por uma lista com um número arbitrário de elementos.
list
: '[]'
| '[' value (COMMA value)* ']'
Se eu quisesse atribuir um valor de retorno para lista, e ter esse valor ser a lista real de valores devolvidos a partir da produção, o que é a maneira correta de fazê-lo? As alternativas Estou entretenimento são:
- criar a minha própria pilha no escopo global para acompanhar estas listas
- Tente inspecionar os nós da árvore abaixo de mim e extrair informações de que maneira
- Acesso lo de alguma liso e fresco maneira que eu estou esperando para saber mais sobre em que eu possa ter acesso fácil a essa lista a partir de dentro a ação associada com a regra.
Eu acho que a pergunta é: Como é que as crianças legais fazê-lo
(FYI Eu estou usando a API do Python para ANTLR, mas se você me bateu com uma outra língua, eu posso lidar com isso)
Solução
Em C # que pode ter esta aparência:
list returns [ List<string> ValueList ]
@init
{
$ValueList = new List<string>();
}
: '[]'
| '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
;
Outras dicas
Eu acho que a maneira mais simples poderia ser
list returns [ List values ]
: '[]'
| '[' vs+=value (COMMA vs+=value)* ']' {
$values = $vs;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow