Link da palestra
A linguagem alvo pode ser ou uma linguagem textual, ou código de máquina (Bytecode, Assembly).
A JVM é alvo de vários compiladores: Java, Clojure, Kotlin, Scala, Groovy, Jython, etc…
Transforma lista de caracteres em árvore de tokens
parse(input: string): Node
class Node:
pass
class Number(Node):
value: int
class String(Node):
value: str
class Assignment(Node): # variable = value
identifier: str
right_hand_side: Node
# ...
sequence | e1 e2 |
|
ordered choice | e1 / e2 |
|
not predicate | !e |
|
and predicate | &e |
(sugar for !!e ) |
zero or more | e* |
|
one or more | e+ |
(sugar for ee* ) |
optional | e? |
(sugar for &ee / !e ) |
e.g.: Parser de CSV
Gramática | Entrada | Resultado |
---|---|---|
|
|
|
1 + 2 * 3 = 7
(1 + 2) * 3 = 9
1 + 2 * 3 = 7 | (1 + 2) * 3 = 9 |
---|---|
|
|
+ 1 * 2 3 = 7
* + 1 2 3 = 9
lisp é um exemplo
(+ 1 (* 2 3))
(* 3 (+ 1 2))
3 2 * 1 + = 7
1 2 + 3 * = 9
Máquina de Pilha
3 2 * 1 + = 7 | 2 1 + 3 * = 9 |
---|---|
|
|
Array.push()
e Array.pop()
Textual | Máquina de Pilha |
---|---|
|
|
Textual | Máquina de Pilha |
---|---|
|
|
Textual | Máquina de Pilha |
---|---|
|
|
Textual | Máquina de Pilha |
---|---|
|
|
Textual | Máquina de Pilha |
---|---|
|
|