Sign in Join
Wiki copytemporary

Scanner/Tokenizer/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Retour au contenu [[FPC internals/fr|FPC internals]]
22
33# Scanner/Tokenizer
44
55Le scanner et tokenizer est utilisé pour construire un flux d'entrée de jetons qui alimentera l'analyseur. C'est lors de cette étape que les prétraitement (preprocessing) est réalisé, que toutes les directives du compilateur qui sont lues modifient l'état interne des variables du compilateur, et que tous les caractères illégaux trouvés dans le flux d'entrée provoquent une erreur.
66
77Infos sur comment les macros fonctionnent : [[Macro internals]].
88
99## Architecture
1010
1111L'architecture générale du scanner est montrée dans la figure suivante: <http://www.pjh2.de/fpc/CompilerInternalsFigure02.png>
1212
1313Plusieurs types peuvent être lus depuis le flux d'entrée, une chaîne, traitée par `readstring`, une valeur numérique, traitée par `readnumeric`, des commentaires, des directives du préprocesseur et du compilateur.
1414
1515### Flux d'entrée
1616
1717*(dernière mise à jour pour fpc version 1.0.x)*
1818
1919Les données d'entrée sont manimpulées via la manière générale de traitement des E/S dans le compilateur. C'est à dire qu'il y a un hook qui peut être surchargé dans **comphook.pas (do_openinputfile)**, au cas où une autre méthode serait voulue.
2020
2121Le hook par défaut utilise un flux DOS non tamponné contenu dans **files.pas**.
2222
2323### Préprocesseur
2424
2525*(dernière mise à jour pour fpc version 1.0.x)*
2626
2727L'analyseur lexical résoud toutes les directives du préprocesseur et donne uniquement à l'analyseur syntaxique la partie visible du code (telle que celle qui est inclue dans les directives conditionnelles). es commutateurs et les directives du compilateur sont également enregistrés dans des variables globales dans le préprocesseur, par conséquent, cette partie est complètement indépendante de l'analyseur.
2828
2929#### Compilation conditionnelle (scandir.inc, scanner.pas)
3030
3131*(dernière mise à jour pour fpc version 1.0.x)*
3232
3333La compilation conditionnelle est manipulée via une pile du préprocesseur, ou chaque directive est placée sur la pile, et dépilée quand elle est résolue. L'implémentation actuelle de la pile est une liste chaînée des éléments de directive du préprocesseur.
3434
3535#### Commutateurs du compiler (scandir.inc, switches.pas)
3636
3737*(dernière mise à jour pour fpc version 1.0.x)*
3838
3939Les commutateurs du compilateur sont gérés via une table de recherche (lookup table) qui fait l'objet d'une recherche linéaire. Ensuite, une autre table de recherche s'occupe de définir les indicateurs de bits et les variables appropriés dans les commutateurs pour ce processus de compilation.
4040
4141## Interface de l'analyseur
4242
4343*(dernière mise à jour pour fpc version 1.0.x)*
4444
4545L'analyseur sémantique ne reçoit que des jetons en entrée, où un jeton est une énumération qui indique le type du jeton, soit un mot réservé, un caractère spécial, un opérateur, une constante numérique, une chaîne ou un identificateur.
4646
4747La résolution d'une chaîne en un jeton est faite à travers une référence qui recherche la chaîne dans une table pour trouver le jeton correspondant grâce à un algorithme de recherche binaire à travers cette table de chaîne.
4848
4949Dans le cas des identificateurs et les constantes (y compris les valeurs numériques), la valeur est retournée dans le variable chaîne **pattern**, avec la valeur de retour appropriée du jeton (les valeurs numériques sont aussi retournées comme des chaînes non converties avec un préfix spécial inclus). Dans le cas des opérateurs et des mots réservés, seul le jeton lui-même doit être considéré comme préservé. La chaîne d'entrée lue est supposée perdue
5050
5151Par conséquent, l'interface avec l'analyseur est avec la routine **readtoken ()** et la variable **pattern**.
5252
5353### Routines
5454
5555#### ReadToken
5656
5757| | |
5858|----|----|
59-| Déclaration: | <b>`procedure`</b>` ReadToken;` |
59+| Déclaration: | `procedure`` ReadToken;` |
6060| Description: | Définit la variable globale de jeton par le dernier jeton lu, et définit la variable **pattern** de manière appropriée (si nécessaire) |
6161
6262### Variables
6363
6464#### Token
6565
6666| | |
6767|----|----|
68-| Déclaration: | <b>`var`</b>` Token: TToken;` |
68+| Déclaration: | `var`` Token: TToken;` |
6969| Description: | Contient le dernier jeton lu lors du dernier appel à la routine ReadToken |
7070| Voir aussi: | ReadToken |
7171
7272#### Pattern
7373
7474| | |
7575|----|----|
76-| Déclaration: | <b>`var`</b>` Pattern: String;` |
76+| Déclaration: | `var`` Pattern: String;` |
7777| Description: | Contient la chaîne du dernier modèle lu après la dernier appel à ReadToken |
7878| Voir aussi: | ReadToken |
7979
8080## Interface du parseur d'assembleur
8181
8282*(dernière mise à jour pour fpc version 1.0.x)*
8383
8484L'analyseur d'assembleur en-ligne est complètement séparé de l'analyseur Pascal, par conséquent son processus d'analyse est aussi complètement indépendant. Le scanner ne s'occupe que de la partie préprocesseur et des commentaires, tout le reste est passé caractère par caractère à l'analyseur assembleur via la routine de scanner **AsmGetChar()**.
8585
8686### Routines
8787
8888#### AsmGetChar
8989
9090| | |
9191|--------------|--------------------------------------------------------|
92-| Déclaration: | <b>`function`</b>` AsmGetChar: Char;` |
92+| Déclaration: | `function`` AsmGetChar: Char;` |
9393| Description: | Retourne le prochain caractère dans le flusx d'entrée. |
9494
9595Prochain chapitre: [[The parse tree/fr|L'arbre d'analyse]]
9696
9797---
9898*From the Free Pascal wiki, page "Scanner/Tokenizer/fr", as it stood on 2020-12-15 after a change by E-ric, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history