Pour répondre à la question posée (sans répéter indûment ce qui apparaît dans
d'autres réponses)
Lexers et des analyseurs syntaxiques ne sont pas très différents, comme suggéré par l'
accepté de répondre. Les deux sont basés sur un langage simple formalismes: régulière
langues pour lexers et, presque toujours, libre de tout contexte (CF) langues
pour les analyseurs syntaxiques. Ils sont tous les deux associés à assez simple de calcul
les modèles, les finite state automaton et de la pousser en bas de la pile, l'automate.
Langages réguliers sont un cas particulier de contexte langues, donc
que lexers pourrait être produite avec un peu plus complexe CF
de la technologie. Mais ce n'est pas une bonne idée pour au moins deux raisons.
Un point fondamental dans la programmation d'un composant de système devrait
être réalisé avec la technologie la plus appropriée, de sorte qu'il est facile de
produire, à comprendre et à maintenir. La technologie ne doit pas être
overkill (en utilisant des techniques beaucoup plus complexe et coûteux que nécessaire),
ni devrait-elle être à la limite de sa puissance, ce qui nécessite des techniques
contorsions pour atteindre le but désiré.
C'est pourquoi "Il semble à la mode de la haine des expressions régulières".
Bien qu'ils peuvent faire beaucoup de choses, parfois, ils ont besoin de très illisible
le codage de l'atteindre, pour ne pas mentionner le fait que les diverses extensions
et les restrictions dans la mise en œuvre réduire quelque peu leurs théorique
de la simplicité. Lexers n'ont pas l'habitude de faire cela, et sont généralement une simple,
efficace, et la technologie appropriée pour analyser le jeton. À l'aide de FC analyseurs
pour jeton serait exagéré, mais il est possible.
Une autre raison de ne pas utiliser CF le formalisme lexers est qu'il pourrait
alors tentant d'utiliser la totalité de la FC de puissance. Mais que pourrait soulever
sructural problèmes concernant la lecture des programmes.
Fondamentalement, la plupart de la structure de texte du programme, à partir de laquelle
le sens est extrait, est une structure en arbre. Elle exprime la façon dont l'analyse
phrase (programme) est généré à partir de règles de syntaxe. La sémantique est
obtenues par les techniques de composition (homomorphism pour l'
mathématiquement orientée) de la façon dont les règles de syntaxe sont composées de
construire l'arbre d'analyse. Par conséquent, la structure d'arbre est essentiel.
Le fait que les jetons sont identifiés avec une brosse à définir en fonction des lexer
ne pas changer la situation, parce que FC composé régulière encore
donne FC (je parle de façon très lâche sur les transducteurs, qui
transformer un flux de caractères en un flux de jeton).
Cependant, CF composé avec CF (via CF transducteurs ... désolé pour l'
les mathématiques), ne donne pas nécessairement des FC, et peut-rend les choses plus
général, mais moins souple dans la pratique. Donc CF n'est pas la bonne
outil pour lexers, même si elle peut être utilisée.
L'une des différences majeures entre les réguliers et des FC est que la pratique régulière de
les langues (et les transducteurs) composer très bien avec presque n'importe quel
le formalisme de diverses manières, tout en CF les langues (et les transducteurs) ne
non, même pas avec eux-mêmes (à quelques exceptions près).
(À noter que la pratique régulière de transducteurs peuvent avoir d'autres usages, tels que
la formalisation de certaines erreur de syntaxe techniques de manipulation.)
La BNF est juste une syntaxe spécifique pour la présentation des grammaires CF.
EBNF est un sucre syntaxique pour la BNF, en utilisant les installations de l'ordinaire
la notation de donner terser version de grammaires BNF. Il peut toujours être
transformé en un équivalent pur de la BNF.
Cependant, la notation est souvent utilisé dans EBNF seulement de mettre en valeur ces
les parties de la syntaxe qui correspondent à la structure lexicale
éléments, et doit être reconnu par l'analyseur lexical, alors que le reste avec
être plutôt présenté à droite de la BNF. Mais ce n'est pas une règle absolue.
Pour résumer, la structure plus simple de jeton est mieux analysé avec
la technologie plus simple des langages réguliers, tandis que l'arbre orienté
la structure de la langue (de programme de syntaxe) est mieux géré par les FC
les grammaires.
Je suggère également à la recherche de PA de réponse.
Mais cela reste une question ouverte: Pourquoi les arbres?
Les arbres sont une bonne base pour la spécification de la syntaxe parce que
ils donnent une structure simple pour le texte
il y a très commode pour l'association de la sémantique avec le texte
sur la base de cette structure, avec une mathématiquement bien
compris la technologie (compositionnalité via homomorphisms), comme
indiqué ci-dessus. C'est une base algébrique outil pour définir la
la sémantique des formalismes mathématiques.
C'est donc une bonne représentation intermédiaire, comme le montre l'
la réussite de l'arbre de Syntaxe Abstraite (AST). Notez que les AST sont souvent
différent de arbre d'analyse, car l'analyse de la technologie utilisée par de nombreuses
professionnels (Tels que LL ou LR) s'applique uniquement à un sous-ensemble de CF
grammaires, forçant ainsi grammaticale des distorsions qui sont plus tard
corrigé de l'AST. Ceci peut être évité avec plus générale d'analyse
la technologie (basé sur la programmation dynamique) qui accepte toutes les CF de la grammaire.
Déclaration sur le fait que les langages de programmation sont
sensibilité au contexte (CS) plutôt que de CF sont arbitraires et discutables.
Le problème est que la séparation de la syntaxe et de la sémantique est
l'arbitraire. La vérification des déclarations ou type d'accord peut être considéré comme
la partie de la syntaxe, ou d'une partie de la sémantique. Il en serait de même de
égalité des sexes et de l'accord en nombre dans les langues naturelles. Mais il y a de naturel
langues où le pluriel de l'accord dépend de la sémantique
le sens des mots, de sorte qu'il ne correspond pas avec la syntaxe.
De nombreuses définitions de langages de programmation, denotational sémantique
lieu déclarations et le type de la vérification de la sémantique. Donc, indiquant que
réalisé par Ira Baxter FC analyseurs sont piratés pour obtenir un contexte
la sensibilité requises par la syntaxe est, au mieux, l'arbitraire d'un point de vue de la
situation. Il peut être organisé comme un hack dans certains compilateurs, mais il
n'a pas à être.
Aussi il n'est pas juste que le CS analyseurs (dans le sens utilisé dans d'autres réponses ici) sont difficiles à construire, et moins
efficace. Ils sont sont également insuffisants pour exprimer perspicuously l'
kinf de sensibilité au contexte qui pourrait être nécessaire. Et ils ne sont pas
produire naturellement une structure syntaxique (comme parse-arbres)
est pratique à tirer de la sémantique du programme, c'est à dire de générer
le code compilé.