Adicionando informações de linha ao meu AST no OCaml
Estou criando um compilador no OCaml, onde a gramática é a seguinte:
type expr =
| Cons of const
| Var of string
| List of ( expr list )
| Sum of ( expr * expr )
| Less_than of ( expr * expr )
| Conditional of ( expr * expr * expr )
| Array_literal of ( expr )
| Array_read of ( expr * expr )
O nó de um AST se parece com isso:
type 'a astNode =
{
data: 'a;
metadata: Metadata;
}
e o módulo Metadados fica assim:
module Metadata = struct
type loc = Lexing.position
type loc_range = loc * loc
and metadata = ?
end
Qual deve ser a gramática dos metadados? Como seria meu código após a linhaand metadata = ?
Basicamente, quando seria necessário atualizar o AST com as informações de metadados. Como devo estruturar meu AST para conter as informações de metadados? Atualmente, os metadados para mim significam sua posição como número da linha, nome do arquivo etc. Isso está incluído no módulo Lexing.position.