Pular para o conteúdo

Gramática — Erros e recursos

5 produções: monitor, trigger, defer, assert. Cada exemplo é aceito pelo parser.

O caminho de erro tem sintaxe própria, e a regra que mais importa é que halt, skip e yield não são erros: eles atravessam o monitor.

ProduçãoNós que ela produz
monitorMonitorBlock
triggerTriggerStatement
deferDeferStatement
assertAssertStatement
resilienciaRetryBlock, ValidateStatement, PropagateStatement

monitor#

text
tratamento    = "monitor" bloco { "handle" [ tipo ] [ "as" nome ] bloco }
                [ "ensure" bloco ] ;
dataforge
monitor:
    trigger "x"
handle Error as e:
    out e.message
ensure:
    out "fim"

trigger#

text
levantar      = "trigger" expressao ;
dataforge
action g():
    trigger "falhou"

defer#

text
adiar         = "defer" bloco ;
dataforge
action f():
    defer:
        out 1
    yield 2

assert#

text
afirmar       = "assert" expressao [ "," expressao ] ;
dataforge
assert 1 is 1, "um e um"

resiliencia#

text
repetir       = "retry" expressao bloco [ "recover" [ nome ] bloco ] ;
repassar      = "propagate" nome ;
validar       = "validate" expressao [ "," expressao ] ;
dataforge
n := 0
action instavel():
    n += 1
    trigger "ainda nao"
retry 3:
    instavel()
recover e:
    out e.message
validate n bigger 0, "n precisa ser positivo"
action f():
    monitor:
        trigger "x"
    handle e:
        propagate e

Estas produções saem de dataforge/gramatica.py. No terminal: dataforge gramatica erros. Volte para a gramática.