Pular para o conteúdo

Gramática — Léxico

6 produções: tokens, literais, comentários e indentação. Cada exemplo é aceito pelo parser.

Antes do parser, o lexer corta o texto em tokens. É aqui que moram as decisões que mais enganam: o // que é comentário, o d que faz um decimal, a indentação que vira INDENT/DEDENT.

ProduçãoNós que ela produz
inteiroIntegerLiteral
decimalDecimalLiteral
textoStringLiteral
interpolacaoInterpolatedString
comentarioAssignment
indentacaoGivenBlock

inteiro#

text
inteiro       = digito { digito | "_" } ;
dataforge
x := 1_000_000

decimal#

text
decimal       = digito { digito } "." digito { digito } "d" ;
dataforge
preco := 19.99d

texto#

text
texto         = '"' { caractere } '"' | '"""' { caractere | NEWLINE } '"""' ;
dataforge
sql := """SELECT *
FROM t"""

interpolacao#

text
interpolado   = "$" '"' { caractere | "{" expressao "}" } '"' ;
dataforge
n := 2
out $"n vale {n * 2}"

comentario#

text
comentario    = "//" { caractere } NEWLINE ;
dataforge
x := 7 // um comentario
y := x ~/ 2

indentacao#

text
bloco         = ":" NEWLINE INDENT { instrucao } DEDENT ;
dataforge
given yes:
    out 1

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