Je suis en train de lire un book sur la construction d'un compilateur. Au chapitre 4, il passe beaucoup de temps à parler de la grammaire des attributs, ce qui m'embrouille beaucoup.pourquoi avons-nous besoin d'attribuer la grammaire dans l'analyse sémantique?
Pourquoi en avons-nous besoin? et comment est-il utilisé dans le compilateur de production?
Il me semble que la grammaire d'attribut est utilisé pour décorer un arbre d'analyse syntaxique dans l'arbre de syntaxe abstraite. Mais pourquoi ne pouvons-nous pas construire des AST dans la phase d'analyse?
Par exemple, dans OCaml, je peux décrire AST comme ceci:
type ast =
| Var of string
| Num of int
| If of test * then * else
...
...
Pour construire un si le nœud, je peux simplement faire If (test, then, else)
Il n'est en effet pas impératif que vous _d'utiliser une grammaire attribuée et/ou une AST dans votre compilateur. C'est juste une façon commune de faire les choses. –
En ce qui concerne votre question sur "pourquoi ne pouvons-nous construire STs dans la phase d'analyse?" Pendant l'analyse, nous construisons AST et le transmettons à l'analyseur sémantique. L'analyseur sémantique ajoute plus d'informations aux nœuds de l'AST (par exemple son type, sa valeur, etc.) qui ne peuvent pas être ajoutés pendant la phase de syntaxe. –