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 |
|---|---|
|
|