ptst

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 8, 2024 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	TipoBooleano = NewTipo(
		"Booleano",
		"Verdadeiro ou Falso",
	)
	Verdadeiro = Booleano(true)
	Falso      = Booleano(false)
)
View Source
var (
	TipoErro = BaseErro.NewTipo("Erro", "Base comum para todos os erros que não são de saída.")

	SintaxeErro       = TipoErro.NewTipo("SintaxeErro", "Sintaxe Invalida.")
	ReatribuicaoErro  = TipoErro.NewTipo("ReatribuicaoErro", "Proibido redeclarar.")
	AtributoErro      = TipoErro.NewTipo("AtributoErro", "Atributo não encontrado.")
	TipagemErro       = TipoErro.NewTipo("TipagemErro", "Tipo de argumento inapropriado.")
	NomeErro          = TipoErro.NewTipo("NomeErro", "Erro de nome que não pode ser achado.")
	ImportacaoErro    = TipoErro.NewTipo("ImportacaoErro", "Não é possível encontrar o módulo ou símbolo nele")
	ValorErro         = TipoErro.NewTipo("ValorErro", "O valor é inapropriádo ou sua ocorrencia não existe")
	IndiceErro        = TipoErro.NewTipo("IndiceErro", "O indice está fora do range aceito")
	RuntimeErro       = TipoErro.NewTipo("RuntimeErro", "Erro no ambiente de execução")
	FimIteracao       = TipoErro.NewTipo("FimIteracao", "Sinaliza o fim da iteração quando `objeto.__proximo__() não retorna mais nada")
	ErroDeAsseguracao = TipoErro.NewTipo("ErroDeAsseguracao", "Erro lançado em um `assegura obj`")

	ConsultaErro = TipoErro.NewTipo("ConsultaErro", "Classe base para erros que envolem chave ou indice em elementos")
	ChaveErro    = ConsultaErro.NewTipo("ChaveErro", "Lançado quando a chave de um mapa não existe ou é inválida")

	SistemaErro              = TipoErro.NewTipo("SistemaErro", "Erro relacionado ao sistema operacional")
	ArquivoNaoEncontradoErro = SistemaErro.NewTipo("ArquivoNaoEncontradoErro", "O arquivo não pôde ser encontrado")

	// Apenas para fins de controle, não são necessariamente erros
	ErroContinue = TipoErro.NewTipo("ErroContinue", "Erro utilizado para representar a instrução 'continue' em loops")
	ErroPare     = TipoErro.NewTipo("ErroPare", "Erro utilizado para representar a instrução 'pare' em loops")
)
View Source
var BaseErro = TipoObjeto.NewTipo(
	"BaseErro",
	"A classe de erro base para todas as outras.",
)
View Source
var Nulo = _Nulo(struct{}{})
View Source
var TipoDecimal = TipoObjeto.NewTipo(
	"Decimal",
	`Decimal(obj) -> Decimal
Cria um novo objeto de decimal para representar o objeto recebido.
Chama obj.__decimal__() ou se esse não for encontrado, um erro pode ser lançado.
	`,
)
View Source
var TipoFuncao = NewTipo("Funcao", "Uma funcao Portuscript")
View Source
var TipoInteiro = TipoObjeto.NewTipo(
	"Inteiro",
	`Inteiro(obj) -> Inteiro
Cria um novo objeto de inteiro para representar o objeto recebido.
Chama obj.__inteiro__() ou se esse não for encontrado, um erro pode ser lançado.
	`,
)
View Source
var TipoIterador = NewTipo("Iterador", "Objeto abstrato que representa um iterador nativo")
View Source
var TipoLista = TipoObjeto.NewTipo(
	"Lista",
	"Lista(obj) -> Lista",
)
View Source
var TipoMapa = NewTipo(
	"Mapa",
	"Objeto chave/valor",
)
View Source
var TipoMetodo = NewTipo("Metodo", "Um metodo Portuscript")
View Source
var TipoMetodoProxy = NewTipo("MetodoProxy", "Um método que não exatamente reflete o método real")
View Source
var TipoModulo = NewTipo("Modulo", "Modulo doc")
View Source
var TipoNulo = TipoObjeto.NewTipo("Nulo", "Tipo que referencia a algo sem valor definido")
View Source
var TipoTexto = TipoObjeto.NewTipo(
	"Texto",
	`Texto(obj) -> Texto
Cria um novo objeto de texto para representar o objeto recebido.
Chama obj.__texto__() ou obj.__repr__(), se nenhum dos dois for encontrado, um erro pode ser lançado.
	`,
)

FIXME: adicionar construtor

View Source
var TipoTupla = TipoObjeto.NewTipo(
	"Tupla",
	"Tupla(obj) -> Tupla",
)

Functions

func EnfileiraMontagemDoTipo added in v0.2.0

func EnfileiraMontagemDoTipo(tipo *Tipo)

func LancarErro

func LancarErro(err error)

func MesmoTipo

func MesmoTipo(a, b Objeto) bool

func MontaOsTipos added in v0.2.0

func MontaOsTipos() error

func MultiImporteModulo added in v0.4.0

func MultiImporteModulo(ctx *Contexto, nomes ...string) error

func NomeAtributo

func NomeAtributo(obj Objeto) (string, error)

func RegistraModuloImpl

func RegistraModuloImpl(impl *ModuloImpl)

func ResolveArquivoPtst added in v0.5.0

func ResolveArquivoPtst(caminhoArqOuMod string, bases []string, curDir string) (string, error)

Resolve por exemplo:

`ResolveArquivoPtst("./atm.ptst", []string{"~/portuscript/exemplo"}, "")` -> ~/portuscript/exemplo/portuscript

func VerificaNumeroArgumentos added in v0.4.0

func VerificaNumeroArgumentos(nome string, ehMetodo bool, args Objeto, min, max int) error

Types

type Booleano

type Booleano bool

func InstanciaDe added in v0.5.0

func InstanciaDe(obj Objeto, tipos any) (Booleano, error)

FIXME: esta não é a melhor assinatura possível

func (Booleano) M__booleano__ added in v0.5.0

func (b Booleano) M__booleano__() (Objeto, error)

func (Booleano) M__diferente__ added in v0.5.0

func (b Booleano) M__diferente__(a Objeto) (Objeto, error)

func (Booleano) M__e__ added in v0.5.0

func (b Booleano) M__e__(a Objeto) (Objeto, error)

func (Booleano) M__igual__ added in v0.5.0

func (b Booleano) M__igual__(a Objeto) (Objeto, error)

func (Booleano) M__ou__ added in v0.5.0

func (b Booleano) M__ou__(a Objeto) (Objeto, error)

func (Booleano) M__texto__ added in v0.5.0

func (b Booleano) M__texto__() (Objeto, error)

func (Booleano) Tipo

func (b Booleano) Tipo() *Tipo

type Contexto

type Contexto struct {
	Modulos *TabelaModulos
	Opcs    OpcsContexto
	// contains filtered or unexported fields
}

func NewContexto

func NewContexto(opcs OpcsContexto) *Contexto

func (*Contexto) AvaliarAst added in v0.5.0

func (c *Contexto) AvaliarAst(ast parser.BaseNode, escopo *Escopo) (Objeto, error)

func (*Contexto) InicializarModulo added in v0.4.0

func (c *Contexto) InicializarModulo(implementacao *ModuloImpl) (*Modulo, error)

func (*Contexto) ObterModulo added in v0.4.0

func (c *Contexto) ObterModulo(nome string) (*Modulo, error)

func (*Contexto) StringParaAst added in v0.5.0

func (c *Contexto) StringParaAst(codigo string) (parser.BaseNode, error)

func (*Contexto) Terminar added in v0.4.0

func (c *Contexto) Terminar()

func (*Contexto) TransformarEmAst added in v0.5.0

func (c *Contexto) TransformarEmAst(caminhoInicial string, useSysPaths bool, curDir string) (caminho string, ast parser.BaseNode, err error)

type Decimal

type Decimal float64

func (Decimal) M__adiciona__ added in v0.5.0

func (d Decimal) M__adiciona__(outro Objeto) (Objeto, error)

func (Decimal) M__booleano__ added in v0.5.0

func (d Decimal) M__booleano__() (Objeto, error)

func (Decimal) M__decimal__ added in v0.5.0

func (d Decimal) M__decimal__() (Objeto, error)

func (Decimal) M__divide__ added in v0.5.0

func (d Decimal) M__divide__(outro Objeto) (Objeto, error)

FIXME: adicionar erro de divisão por zero

func (Decimal) M__divide_inteiro__ added in v0.5.0

func (d Decimal) M__divide_inteiro__(b Objeto) (Objeto, error)

FIXME: adicionar erro de divisão por zero

func (Decimal) M__inteiro__ added in v0.5.0

func (d Decimal) M__inteiro__() (Objeto, error)

func (Decimal) M__mod__ added in v0.5.0

func (d Decimal) M__mod__(b Objeto) (Objeto, error)

func (Decimal) M__multiplica__ added in v0.5.0

func (d Decimal) M__multiplica__(outro Objeto) (Objeto, error)

func (Decimal) M__neg__ added in v0.5.0

func (d Decimal) M__neg__() (Objeto, error)

func (Decimal) M__pos__ added in v0.5.0

func (d Decimal) M__pos__() (Objeto, error)

func (Decimal) M__subtrai__ added in v0.5.0

func (d Decimal) M__subtrai__(outro Objeto) (Objeto, error)

func (Decimal) M__texto__ added in v0.5.0

func (d Decimal) M__texto__() (Objeto, error)

func (Decimal) Tipo

func (d Decimal) Tipo() *Tipo

type Erro

type Erro struct {
	Base     *Tipo
	Contexto *Contexto
	Mensagem Objeto // Está certo isso?
}

func NewErro

func NewErro(tipo *Tipo, mensagem Objeto) *Erro

func NewErroF

func NewErroF(tipo *Tipo, format string, p ...any) *Erro

func (*Erro) AdicionarContexto

func (e *Erro) AdicionarContexto(contexto *Contexto)

func (*Erro) Error

func (e *Erro) Error() string

func (*Erro) Tipo added in v0.2.0

func (e *Erro) Tipo() *Tipo

type Escopo added in v0.5.0

type Escopo struct {
	Simbolos map[string]*Simbolo
	Pai      *Escopo
}

func NewEscopo added in v0.5.0

func NewEscopo() *Escopo

func (*Escopo) DefinirSimbolo added in v0.5.0

func (e *Escopo) DefinirSimbolo(simbolo *Simbolo) error

func (*Escopo) ExcluirSimbolo added in v0.5.0

func (e *Escopo) ExcluirSimbolo(nome string) error

func (*Escopo) Len added in v0.5.0

func (e *Escopo) Len() int

func (*Escopo) NewEscopo added in v0.5.0

func (e *Escopo) NewEscopo() *Escopo

func (*Escopo) ObterValor added in v0.5.0

func (e *Escopo) ObterValor(nome string) (Objeto, error)

func (*Escopo) RedefinirValor added in v0.5.0

func (e *Escopo) RedefinirValor(nome string, valor Objeto) error

type Funcao

type Funcao struct {
	Nome string // Disponível em `funcao.__nome__`
	Doc  Texto  // Disponível em `funcao.__doc__`
	// contains filtered or unexported fields
}

func NewFuncao

func NewFuncao(nome string, corpo *parser.Bloco, contexto *Contexto, escopo *Escopo) *Funcao

func (*Funcao) M__chame__ added in v0.5.0

func (f *Funcao) M__chame__(args Tupla) (Objeto, error)

func (*Funcao) Tipo

func (f *Funcao) Tipo() *Tipo

type GerenciadorModulos

type GerenciadorModulos struct {
	Impls map[string]*ModuloImpl
	// contains filtered or unexported fields
}

func (*GerenciadorModulos) ObtemImplModulo

func (g *GerenciadorModulos) ObtemImplModulo(nome string) *ModuloImpl

func (*GerenciadorModulos) RegistraModuloImpl

func (g *GerenciadorModulos) RegistraModuloImpl(impl *ModuloImpl)

type I_Chamar

type I_Chamar interface {
	Chamar(inst Objeto, args Tupla) (Objeto, error)
}

type I_ObtemDoc

type I_ObtemDoc interface {
	ObtemDoc() string
}

type I_ObtemMapa added in v0.6.0

type I_ObtemMapa interface {
	ObtemMapa() Mapa
}

type I__adiciona__

type I__adiciona__ interface {
	M__adiciona__(outro Objeto) (Objeto, error)
}

type I__booleano__

type I__booleano__ interface {
	M__booleano__() (Objeto, error)
}

type I__chame__

type I__chame__ interface {
	M__chame__(args Tupla) (Objeto, error)
}

type I__decimal__

type I__decimal__ interface {
	M__decimal__() (Objeto, error)
}

type I__define_item__ added in v0.6.0

type I__define_item__ interface {
	M__define_item__(chave, valor Objeto) (Objeto, error)
}

type I__diferente__

type I__diferente__ interface {
	M__diferente__(outro Objeto) (Objeto, error)
}

type I__divide__

type I__divide__ interface {
	M__divide__(outro Objeto) (Objeto, error)
}

type I__divide_inteiro__ added in v0.3.0

type I__divide_inteiro__ interface {
	M__divide_inteiro__(outro Objeto) (Objeto, error)
}

type I__e__

type I__e__ interface {
	M__e__(outro Objeto) (Objeto, error)
}

type I__igual__

type I__igual__ interface {
	M__igual__(outro Objeto) (Objeto, error)
}

type I__inicializa__ added in v0.6.0

type I__inicializa__ interface {
	M__inicializa__(args Tupla) error
}

type I__inteiro__

type I__inteiro__ interface {
	M__inteiro__() (Objeto, error)
}

type I__iter__ added in v0.3.0

type I__iter__ interface {
	M__iter__() (Objeto, error)
}

type I__maior_ou_igual__

type I__maior_ou_igual__ interface {
	M__maior_ou_igual__(outro Objeto) (Objeto, error)
}

type I__maior_que__

type I__maior_que__ interface {
	M__maior_que__(outro Objeto) (Objeto, error)
}

type I__menor_ou_igual__

type I__menor_ou_igual__ interface {
	M__menor_ou_igual__(outro Objeto) (Objeto, error)
}

type I__menor_que__

type I__menor_que__ interface {
	M__menor_que__(outro Objeto) (Objeto, error)
}

type I__mod__ added in v0.5.0

type I__mod__ interface {
	M__mod__(outro Objeto) (Objeto, error)
}

type I__multiplica__

type I__multiplica__ interface {
	M__multiplica__(outro Objeto) (Objeto, error)
}

type I__neg__ added in v0.5.0

type I__neg__ interface {
	M__neg__() (Objeto, error)
}

type I__nova_instancia__ added in v0.6.0

type I__nova_instancia__ interface {
	M__nova_instancia__(meta *Tipo, args Tupla) (Objeto, error)
}

Semelhante ao __new__ do python

type I__obtem__ added in v0.2.0

type I__obtem__ interface {
	M__obtem__(inst Objeto, dono *Tipo) (Objeto, error)
}

FIXME: inst é a instacia; e dono, o objeto vindo do método `Tipo()`

type I__obtem_attributo__

type I__obtem_attributo__ interface {
	M__obtem_attributo__(nome string) (Objeto, error)
}

type I__obtem_item__ added in v0.6.0

type I__obtem_item__ interface {
	M__obtem_item__(obj Objeto) (Objeto, error)
}

type I__ou__

type I__ou__ interface {
	M__ou__(outro Objeto) (Objeto, error)
}

type I__pos__ added in v0.5.0

type I__pos__ interface {
	M__pos__() (Objeto, error)
}

type I__proximo__ added in v0.3.0

type I__proximo__ interface {
	M__proximo__() (Objeto, error)
}

type I__subtrai__

type I__subtrai__ interface {
	M__subtrai__(outro Objeto) (Objeto, error)
}

type I__tamanho__ added in v0.3.0

type I__tamanho__ interface {
	M__tamanho__() (Objeto, error)
}

type I__texto__

type I__texto__ interface {
	M__texto__() (Objeto, error)
}

type I_aritmeticaBooleana added in v0.3.0

type I_aritmeticaBooleana interface {
	I__ou__
	I__e__
}

type I_conversaoEntreTipos added in v0.3.0

type I_conversaoEntreTipos interface {
	I__texto__
	I__inteiro__
	I__decimal__
	I__booleano__
}

type I_iterador added in v0.3.0

type I_iterador interface {
	I__iter__
	I__proximo__
}

type InicializaFunc

type InicializaFunc func(args Tupla) error

func __inicializa__(instancia, argumentos) {}

type Inteiro

type Inteiro int64

func (Inteiro) M__adiciona__ added in v0.5.0

func (i Inteiro) M__adiciona__(b Objeto) (Objeto, error)

func (Inteiro) M__booleano__ added in v0.5.0

func (i Inteiro) M__booleano__() (Objeto, error)

func (Inteiro) M__decimal__ added in v0.5.0

func (i Inteiro) M__decimal__() (Objeto, error)

func (Inteiro) M__diferente__ added in v0.5.0

func (i Inteiro) M__diferente__(b Objeto) (Objeto, error)

func (Inteiro) M__divide__ added in v0.5.0

func (i Inteiro) M__divide__(b Objeto) (Objeto, error)

FIXME: adicionar erro de divisão por zero

func (Inteiro) M__divide_inteiro__ added in v0.5.0

func (i Inteiro) M__divide_inteiro__(b Objeto) (Objeto, error)

FIXME: adicionar erro de divisão por zero

func (Inteiro) M__e__ added in v0.5.0

func (i Inteiro) M__e__(b Objeto) (Objeto, error)

func (Inteiro) M__igual__ added in v0.5.0

func (i Inteiro) M__igual__(b Objeto) (Objeto, error)

func (Inteiro) M__inteiro__ added in v0.5.0

func (i Inteiro) M__inteiro__() (Objeto, error)

func (Inteiro) M__maior_ou_igual__ added in v0.5.0

func (i Inteiro) M__maior_ou_igual__(b Objeto) (Objeto, error)

func (Inteiro) M__maior_que__ added in v0.5.0

func (i Inteiro) M__maior_que__(b Objeto) (Objeto, error)

func (Inteiro) M__menor_ou_igual__ added in v0.5.0

func (i Inteiro) M__menor_ou_igual__(b Objeto) (Objeto, error)

func (Inteiro) M__menor_que__ added in v0.5.0

func (i Inteiro) M__menor_que__(b Objeto) (Objeto, error)

func (Inteiro) M__mod__ added in v0.5.0

func (i Inteiro) M__mod__(b Objeto) (Objeto, error)

func (Inteiro) M__multiplica__ added in v0.5.0

func (i Inteiro) M__multiplica__(b Objeto) (Objeto, error)

func (Inteiro) M__neg__ added in v0.5.0

func (i Inteiro) M__neg__() (Objeto, error)

func (Inteiro) M__ou__ added in v0.5.0

func (i Inteiro) M__ou__(b Objeto) (Objeto, error)

func (Inteiro) M__pos__ added in v0.5.0

func (i Inteiro) M__pos__() (Objeto, error)

func (Inteiro) M__subtrai__ added in v0.5.0

func (i Inteiro) M__subtrai__(b Objeto) (Objeto, error)

func (Inteiro) M__texto__ added in v0.5.0

func (i Inteiro) M__texto__() (Objeto, error)

func (Inteiro) Tipo

func (i Inteiro) Tipo() *Tipo

type Interpretador

type Interpretador struct {
	Ast          parser.BaseNode
	Contexto     *Contexto
	Escopo       *Escopo
	ValorRetorno Objeto
}

func (*Interpretador) Inicializa

func (i *Interpretador) Inicializa() (Objeto, error)

func (*Interpretador) Visite

func (i *Interpretador) Visite(nodes []parser.BaseNode) (Objeto, error)

type Iterador added in v0.3.0

type Iterador struct {
	Posicao   int
	Conteiner Objeto
}

func NewIterador added in v0.3.0

func NewIterador(seq Objeto) (*Iterador, error)

func (*Iterador) M__iter__ added in v0.5.0

func (it *Iterador) M__iter__() (Objeto, error)

func (*Iterador) M__proximo__ added in v0.5.0

func (it *Iterador) M__proximo__() (Objeto, error)

func (*Iterador) Tipo added in v0.3.0

func (it *Iterador) Tipo() *Tipo

type Lista added in v0.3.0

type Lista struct {
	Itens Tupla
}

func (*Lista) Adiciona added in v0.3.0

func (l *Lista) Adiciona(item Objeto) (Objeto, error)

func (*Lista) Indice added in v0.3.0

func (l *Lista) Indice(obj Objeto) (Objeto, error)

func (*Lista) M__define_item__ added in v0.6.0

func (l *Lista) M__define_item__(chave, valor Objeto) (Objeto, error)

func (*Lista) M__iter__ added in v0.5.0

func (l *Lista) M__iter__() (Objeto, error)

func (*Lista) M__obtem_item__ added in v0.6.0

func (l *Lista) M__obtem_item__(obj Objeto) (Objeto, error)

func (*Lista) M__tamanho__ added in v0.5.0

func (l *Lista) M__tamanho__() (Objeto, error)

func (*Lista) M__texto__ added in v0.5.0

func (l *Lista) M__texto__() (Objeto, error)

func (*Lista) Pop added in v0.3.0

func (l *Lista) Pop(indice Inteiro) (Objeto, error)

func (*Lista) Tipo added in v0.3.0

func (l *Lista) Tipo() *Tipo

type Mapa

type Mapa map[string]Objeto

func NewMapaVazio added in v0.4.0

func NewMapaVazio() Mapa

func (Mapa) M__define_item__ added in v0.6.0

func (m Mapa) M__define_item__(obj, valor Objeto) (Objeto, error)

func (Mapa) M__iter__ added in v0.6.0

func (m Mapa) M__iter__() (Objeto, error)

func (Mapa) M__obtem_item__ added in v0.6.0

func (m Mapa) M__obtem_item__(obj Objeto) (Objeto, error)

func (Mapa) M__tamanho__ added in v0.6.0

func (m Mapa) M__tamanho__() (Objeto, error)

func (Mapa) M__texto__ added in v0.6.0

func (m Mapa) M__texto__() (Objeto, error)

func (Mapa) Tipo

func (m Mapa) Tipo() *Tipo

type Metodo

type Metodo struct {
	Nome   string
	Doc    string
	Modulo *Modulo
	// contains filtered or unexported fields
}

func NewMetodo

func NewMetodo(nome string, chamavel interface{}, doc string) (*Metodo, error)

Copiado de https://github.com/go-python/gpython/blob/main/py/method.go#L97C1-L115C2

func NewMetodoOuPanic

func NewMetodoOuPanic(nome string, chamavel interface{}, doc string) *Metodo

func NewMetodoProxyDeNativo added in v0.5.0

func NewMetodoProxyDeNativo(nome string, chamavel interface{}) (*Metodo, error)

func (*Metodo) Chamar

func (m *Metodo) Chamar(inst Objeto, args Tupla) (Objeto, error)

func (*Metodo) M__chame__ added in v0.5.0

func (m *Metodo) M__chame__(args Tupla) (Objeto, error)

func (*Metodo) M__obtem__ added in v0.5.0

func (m *Metodo) M__obtem__(inst Objeto, dono *Tipo) (Objeto, error)

FIXME: isso deve retornar um proxy

func (*Metodo) ObtemDoc

func (m *Metodo) ObtemDoc() string

func (*Metodo) Tipo

func (o *Metodo) Tipo() *Tipo

type MetodoProxy added in v0.2.0

type MetodoProxy struct {
	Inst   Objeto // a instancia
	Metodo Objeto
}

func NewMetodoProxy added in v0.5.0

func NewMetodoProxy(inst, metodo Objeto) *MetodoProxy

func (*MetodoProxy) M__chame__ added in v0.5.0

func (mp *MetodoProxy) M__chame__(args Tupla) (Objeto, error)

func (*MetodoProxy) ObtemDoc added in v0.3.0

func (mp *MetodoProxy) ObtemDoc() string

func (*MetodoProxy) Tipo added in v0.2.0

func (mp *MetodoProxy) Tipo() *Tipo

type Modulo

type Modulo struct {
	Impl     *ModuloImpl
	Contexto *Contexto
	Escopo   *Escopo
	// contains filtered or unexported fields
}

func ExecutarArquivo added in v0.5.0

func ExecutarArquivo(ctx *Contexto, nome, caminho, curDir string, useSysPaths bool) (*Modulo, error)

func ExecutarString added in v0.5.0

func ExecutarString(ctx *Contexto, codigo string) (*Modulo, error)

func (*Modulo) M__obtem_attributo__ added in v0.5.0

func (m *Modulo) M__obtem_attributo__(nome string) (objeto Objeto, err error)

func (*Modulo) Tipo

func (m *Modulo) Tipo() *Tipo

type ModuloImpl

type ModuloImpl struct {
	Info    ModuloInfo
	Metodos []*Metodo

	// Talvez os dois próximos sejam um pouco redundante
	Constantes Mapa
	Variaveis  Mapa

	Ast parser.BaseNode
}

func ObtemImplModulo

func ObtemImplModulo(nome string) *ModuloImpl

type ModuloInfo

type ModuloInfo struct {
	Nome    string // Disponível em __nome__
	Doc     string // Disponível em __doc__
	Arquivo string // Caminho relativo (talvez?) referente ao módulo. Disponível em __caminho__
}

type NovaFunc added in v0.6.0

type NovaFunc func(args Tupla) (Objeto, error)

type Objeto

type Objeto interface {
	Tipo() *Tipo
}

func Adiciona

func Adiciona(a, b Objeto) (Objeto, error)

func Chamar

func Chamar(obj Objeto, args Objeto) (Objeto, error)

func DefineItem added in v0.6.0

func DefineItem(inst, chave, valor Objeto) (Objeto, error)

func Diferente

func Diferente(a, b Objeto) (Objeto, error)

func Divide

func Divide(a, b Objeto) (Objeto, error)

func DivideInteiro added in v0.3.0

func DivideInteiro(a, b Objeto) (Objeto, error)

func E

func E(a, b Objeto) (Objeto, error)

func Igual

func Igual(a, b Objeto) (Objeto, error)

func Iter added in v0.3.0

func Iter(obj Objeto) (Objeto, error)

func MaiorOuIgual

func MaiorOuIgual(a, b Objeto) (Objeto, error)

func MaiorQue

func MaiorQue(a, b Objeto) (Objeto, error)

func MaquinarioImporteModulo added in v0.4.0

func MaquinarioImporteModulo(ctx *Contexto, nome string, escopo *Escopo) (Objeto, error)

func MenorOuIgual

func MenorOuIgual(a, b Objeto) (Objeto, error)

func MenorQue

func MenorQue(a, b Objeto) (Objeto, error)

func Mod added in v0.5.0

func Mod(a, b Objeto) (Objeto, error)

func Multiplica

func Multiplica(a, b Objeto) (Objeto, error)

func Nao

func Nao(obj Objeto) (Objeto, error)

func Neg added in v0.5.0

func Neg(a Objeto) (Objeto, error)

func NewBooleano

func NewBooleano(obj any) (Objeto, error)

func NewDecimal

func NewDecimal(obj any) (Objeto, error)

func NewInteiro

func NewInteiro(obj any) (Objeto, error)

func NewTexto

func NewTexto(arg any) (Objeto, error)

func NovaInstancia added in v0.6.0

func NovaInstancia(obj Objeto, args Tupla) (Objeto, error)

func ObtemAtributoRecursivamente added in v0.6.0

func ObtemAtributoRecursivamente(classe Objeto, nome string) Objeto

FIXME: talve ficasse mais performático usando goroutines (ou pode não ser uma boa ideia)

func ObtemAtributoS added in v0.6.0

func ObtemAtributoS(inst Objeto, nome string) (Objeto, error)

func ObtemItem added in v0.6.0

func ObtemItem(inst, arg Objeto) (Objeto, error)

func Ou

func Ou(a, b Objeto) (Objeto, error)

func Pos added in v0.5.0

func Pos(a Objeto) (Objeto, error)

func Proximo added in v0.3.0

func Proximo(obj Objeto) (Objeto, error)

func Subtrai

func Subtrai(a, b Objeto) (Objeto, error)

type OpcsContexto added in v0.5.0

type OpcsContexto struct {
	// Argumentos do terminal quando roda por exemplo: `go run ./main.go`
	Args []string
	// Caminhos possíveis para resolução de módulos e arquivos
	CaminhosPadrao []string
}

type Simbolo

type Simbolo struct {
	Nome      string
	Valor     Objeto
	Constante bool
}

func NewConstSimbolo

func NewConstSimbolo(nome string, valor Objeto) *Simbolo

func NewVarSimbolo

func NewVarSimbolo(nome string, valor Objeto) *Simbolo

type TabelaModulos

type TabelaModulos struct {
	Embutidos *Modulo
	// contains filtered or unexported fields
}

func NewTabelaModulos

func NewTabelaModulos() *TabelaModulos

func (*TabelaModulos) NewModulo

func (tabela *TabelaModulos) NewModulo(ctx *Contexto, impl *ModuloImpl) (*Modulo, error)

func (*TabelaModulos) ObterModulo added in v0.4.0

func (tabela *TabelaModulos) ObterModulo(nome string) (*Modulo, error)

type Texto

type Texto string

func (Texto) M__adiciona__ added in v0.5.0

func (t Texto) M__adiciona__(outro Objeto) (Objeto, error)

func (Texto) M__booleano__ added in v0.5.0

func (t Texto) M__booleano__() (Objeto, error)

func (Texto) M__igual__ added in v0.5.0

func (t Texto) M__igual__(outro Objeto) (Objeto, error)

func (Texto) M__multiplica__ added in v0.5.0

func (t Texto) M__multiplica__(outro Objeto) (Objeto, error)

func (Texto) M__tamanho__ added in v0.5.0

func (t Texto) M__tamanho__() (Objeto, error)

func (Texto) M__texto__ added in v0.5.0

func (t Texto) M__texto__() (Objeto, error)

func (Texto) String

func (t Texto) String() string

func (Texto) Tipo

func (t Texto) Tipo() *Tipo

type Tipo

type Tipo struct {
	Nome       string         // Nome para o tipo
	Nova       NovaFunc       // Abstração para a interface `__nova_instancia__`
	Inicializa InicializaFunc // Funcao/Metodo chamado quando instanciar uma classe
	Doc        string         // A documentaçao para ajudar (ou não) a entender a classe
	Base       *Tipo          // A classe da qual a atual herda
	Mapa       Mapa
}

Talvez um MRO seria útil?

var TipoObjeto *Tipo = TipoTipo.NewTipo(
	"Objeto",
	"A classe base para todas as outras classes.",
)
var TipoTipo *Tipo = NewTipo(
	"Tipo",
	"Tipo raiz para todos os objetos (interno).",
)

func NewTipo

func NewTipo(nome string, doc string) *Tipo

func (*Tipo) M__nova_instancia__ added in v0.6.0

func (b *Tipo) M__nova_instancia__(meta *Tipo, args Tupla) (Objeto, error)

func (*Tipo) Monta added in v0.2.0

func (b *Tipo) Monta() error

func (*Tipo) NewTipo

func (b *Tipo) NewTipo(nome string, doc string) *Tipo

func (*Tipo) NewTipoX

func (b *Tipo) NewTipoX(nome string, doc string, nova NovaFunc, inicializa InicializaFunc) *Tipo

func (*Tipo) ObtemDoc

func (b *Tipo) ObtemDoc() string

func (*Tipo) ObtemMapa added in v0.2.0

func (b *Tipo) ObtemMapa() Mapa

func (*Tipo) Tipo added in v0.6.0

func (b *Tipo) Tipo() *Tipo

FIXME: isso pode não estar certo

type Tupla

type Tupla []Objeto

func (Tupla) DefineItem added in v0.6.0

func (t Tupla) DefineItem(chave, valor Objeto, nomeTipo string) (Objeto, error)

func (Tupla) GRepr added in v0.3.0

func (t Tupla) GRepr(inicio, fim string) (Objeto, error)

func (Tupla) M__define_item__ added in v0.6.0

func (t Tupla) M__define_item__(chave, valor Objeto) (Objeto, error)

func (Tupla) M__iter__ added in v0.5.0

func (t Tupla) M__iter__() (Objeto, error)

func (Tupla) M__obtem_item__ added in v0.6.0

func (t Tupla) M__obtem_item__(obj Objeto) (Objeto, error)

func (Tupla) M__tamanho__ added in v0.5.0

func (t Tupla) M__tamanho__() (Objeto, error)

func (Tupla) M__texto__ added in v0.5.0

func (t Tupla) M__texto__() (Objeto, error)

func (Tupla) ObtemItem added in v0.6.0

func (t Tupla) ObtemItem(i Objeto, nomeTipo string) (Objeto, error)

func (Tupla) Tipo

func (t Tupla) Tipo() *Tipo

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL