Ex. décrire les réductions applicables à un panier d’achat • Apporter de la flexibilité tout en définissant des limites ◦ Laissez les commerciaux gérer les réductions... ◦ .... mais empêchez les de faire n’importe quoi ! *DSL = Domain specific language
plus précis que nécessaire. • “public” peut-il aussi être un nom de constante ? Token::Public Token::Identifier (value = “public”) NON OUI Ne marche pas en PHP !
c’est à dire les enchaînements de tokens valides Exemple: - Un “if” doit être suivi par: - une parenthèse ouvrante - une “expression” - une parenthèse fermante - Une “expression” commence par une “variable” ou un “chiffre”, suivi optionnellement d’un “opérateur binaire” lui-même suivi d’une “expression” - ...
du code sous la forme des noeuds d’un arbre. Exemple: Un “if / else” sera représenté par un noeud “ConditionalNode” (ou “TernaryNode”) qui stockera lui-même 3 autres noeuds: • La condition à évaluer (“AbstractNode”) • Le noeud à exécuter si la condition est vraie (“BlockNode”) • Le noeud à exécuter si la condition est fausse (“BlockNode”)
même code: • Serialization de l’AST • Compilation dans un autre langage (ex. générer du code PHP) • Générer un bytecode exploitable par une machine virtuelle ◦ PHP / Opcache ◦ Java ◦ ...