Advertisement
Guest User

ast

a guest
Jun 27th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.44 KB | None | 0 0
  1. (* The type of the abstract syntax tree (AST). *)
  2. open Lexing
  3.  
  4. type ident = string
  5. type 'a pos =  'a * Lexing.position (* tipo e posição no arquivo fonte *)
  6.  
  7. type 'expr programa = Programa of declaracoes * ('expr funcoes) * ('expr comandos)
  8. and declaracoes = declaracao list
  9. and 'expr funcoes = ('expr funcao) list
  10. and 'expr comandos = ('expr comando) list
  11.  
  12. and declaracao = DecVar of (ident pos) * tipo
  13.  
  14. and 'expr funcao = DecFun of ('expr decfn)
  15.  
  16. and 'expr decfn = {
  17.   fn_nome:    ident pos;
  18.   fn_tiporet: tipo;
  19.   fn_formais: (ident pos * tipo) list;
  20.   fn_locais:  declaracoes;
  21.   fn_corpo:   'expr comandos
  22. }
  23.  
  24. and tipo = TipoInt
  25.          | TipoString
  26.          | TipoBool
  27.          | TipoVoid
  28.          | TipoArranjo of tipo * (int pos) * (int pos)
  29.          | TipoRegistro of campos
  30.  
  31. and campos = campo list
  32. and campo = ident pos * tipo
  33.  
  34. and 'expr comando =
  35.   | CmdAtrib of 'expr * 'expr
  36.   | CmdSe of 'expr * ('expr comandos) * ('expr comandos option)
  37.   | CmdEntrada of ('expr expressoes)
  38.   | CmdSaida of ('expr expressoes)
  39.   | CmdRetorno of 'expr option
  40.   | CmdChamada of 'expr
  41.  
  42. and 'expr variaveis = ('expr variavel) list
  43. and 'expr variavel =
  44.   | VarSimples of ident pos
  45.   | VarCampo of ('expr variavel) * (ident pos)
  46.   | VarElemento of ('expr variavel) * 'expr
  47. and 'expr expressoes = 'expr list
  48.  
  49. and oper =
  50.   | Mais
  51.   | Menos
  52.   | Mult
  53.   | Div
  54.   | Menor
  55.   | Igual
  56.   | Difer
  57.   | Maior
  58.   | E
  59.   | Ou
  60.   | Concat
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement