web-dev-qa-db-fra.com

Qu'est-ce que l'analyse en termes qu'un nouveau programmeur comprendrait?

Je suis un étudiant universitaire obtenant mon diplôme en informatique. Beaucoup de mes camarades n'ont pas vraiment fait beaucoup de programmation. Ils ont fait leurs devoirs de classe, mais soyons honnêtes ici, ces questions ne vous apprennent pas vraiment comment programmer.

Plusieurs autres élèves m'ont posé des questions sur la façon d'analyser les choses, et je ne sais jamais très bien comment leur expliquer. Est-il préférable de commencer simplement à rechercher ligne par ligne des sous-chaînes, ou tout simplement de leur donner la leçon la plus compliquée sur l'utilisation d'une analyse lexicale appropriée, etc. pour créer des jetons, utiliser BNF et toutes ces autres choses? Ils ne le comprennent jamais vraiment quand j'essaye de l'expliquer.

Quelle est la meilleure approche pour expliquer cela sans les confondre ou les décourager d'essayer réellement.

57
Daisetsu

J'expliquerais l'analyse comme le processus de transformation d'une sorte de données en une autre sorte de données.

En pratique, pour moi, cela consiste presque toujours à transformer une chaîne ou des données binaires en une structure de données à l'intérieur de mon programme.

Par exemple, tourner

":Nick!User@Host PRIVMSG #channel :Hello!"

en (C)

struct irc_line {
    char *nick;
    char *user;
    char *Host;
    char *command;
    char **arguments;
    char *message;
} sample = { "Nick", "User", "Host", "PRIVMSG", { "#channel" }, "Hello!" }
68
LukeN

Analyse est le processus d'analyse de texte constitué d'une séquence de jetons pour déterminer sa structure grammaticale par rapport à une grammaire formelle donnée (plus ou moins).

L'analyseur crée ensuite une structure de données basée sur les jetons. Cette structure de données peut ensuite être utilisée par un compilateur, un interprète ou un traducteur pour créer un programme exécutable ou une bibliothèque.

alt text
(source: wikimedia.org )

Si je vous donnais une phrase en anglais et vous demandais de décomposer la phrase en ses parties de discours (noms, verbes, etc.), vous analyseriez la phrase.

C'est l'explication la plus simple de l'analyse à laquelle je puisse penser.

Cela dit, l'analyse est un problème de calcul non trivial. Vous devez commencer par des exemples simples et progresser vers les plus complexes.

33
Robert Harvey

Qu'est-ce que l'analyse?

En informatique, l'analyse est le processus d'analyse du texte pour déterminer s'il appartient à une langue spécifique ou non (c'est-à-dire est syntaxiquement valable pour la grammaire de cette langue). C'est un nom informel pour le processus analyse syntaxique .

Par exemple, supposons que la langue a^n b^n (ce qui signifie le même nombre de caractères A suivi du même nombre de caractères B). Un analyseur pour cette langue accepterait l'entrée AABB et rejeterait l'entrée AAAB. C'est ce que fait un analyseur.

De plus, au cours de ce processus, une structure de données pourrait être créée pour un traitement ultérieur. Dans mon exemple précédent, il pourrait, par exemple, stocker les AA et BB dans deux piles distinctes.

Tout ce qui se passe après, comme donner un sens à AA ou BB, ou le transformer en autre chose, n'est pas une analyse. Donner du sens à des parties d'une séquence d'entrée de jetons s'appelle analyse sémantique .

Qu'est-ce qui n'analyse pas?

  • L'analyse n'est pas de transformer une chose en une autre. Transformer A en B, c'est, en substance, ce que fait compilateur . La compilation prend plusieurs étapes, l'analyse n'est que l'une d'entre elles.
  • L'analyse n'est pas extraire la signification d'un texte. Extraire la signification d'un texte, c'est analyse sémantique qui est une étape de la compilation processus.

Quelle est la manière la plus simple de le comprendre?

Je pense que la meilleure façon de comprendre le concept d'analyse est de commencer par les concepts les plus simples. L'automate fini est le plus simple dans le domaine du traitement du langage. C'est un formalisme pour analyser les langages réguliers, tels que les expressions régulières.

C'est très simple, vous avez une entrée, un ensemble d'états et un ensemble de transitions. Considérez la langue suivante construite sur l'alphabet { A, B }, L = { w | w starts with 'AA' or 'BB' as substring }. L'automate ci-dessous représente un analyseur possible pour cette langue dont tous les mots valides commencent par 'AA' ou 'BB'.

    A-->(q1)--A-->(qf)
   /  
 (q0)    
   \          
    B-->(q2)--B-->(qf)

C'est un analyseur très simple pour cette langue. Vous commencez à (q0), l'état initial, puis vous lisez un symbole de l'entrée, si c'est A alors vous passez à (q1) état, sinon (c'est un B, souvenez-vous que l'alphabet n'est que A et B) vous passez à (q2) état et ainsi de suite. Si vous atteignez (qf) state, puis l'entrée a été acceptée.

Comme c'est visuel, vous n'avez besoin que d'un crayon et d'un morceau de papier pour expliquer ce qu'est un analyseur à quiconque, y compris un enfant. Je pense que la simplicité est ce qui fait des automates le moyen le plus approprié pour enseigner des concepts de traitement du langage, tels que l'analyse syntaxique.

Enfin, en tant qu'étudiant en informatique, vous étudierez ces concepts en profondeur dans des cours théoriques d'informatique tels que les langages formels et la théorie du calcul.

22
CARLOS LOTH

Demandez-leur d'essayer d'écrire un programme qui peut évaluer des expressions arithmétiques simples arbitraires. C'est un problème simple à comprendre, mais au fur et à mesure que vous commencez à l'approfondir, de nombreuses analyses de base commencent à avoir un sens.

5
Sijin

L'analyse consiste à LIRE les données dans un seul format, afin que vous puissiez les utiliser selon vos besoins.

Je pense que vous devez leur apprendre à penser comme ça. Donc, c'est la façon la plus simple à laquelle je peux penser pour expliquer l'analyse pour quelqu'un de nouveau à ce concept.

Généralement, nous essayons d'analyser les données une ligne à la fois, car il est généralement plus facile pour les humains de penser de cette façon, de diviser et de conquérir, et aussi plus facile à coder.

Nous appelons le champ à toutes les données minimales indivisibles. Le nom est un champ, l'âge est un autre champ et le nom de famille est un autre champ. Par exemple.

En ligne, nous pouvons avoir différents champs. Afin de les distinguer, nous pouvons délimiter les champs par des séparateurs ou par la longueur maximale assignée à chaque champ.

Par exemple: en séparant les champs par une virgule

Paul, 20 ans, Jones

Ou par espace (le nom peut avoir 20 lettres maximum, l'âge jusqu'à 3 chiffres, Jones jusqu'à 20 lettres)

Paul 020Jones

L'un des ensembles de champs précédents est appelé un enregistrement.

Pour séparer un enregistrement de champ délimité, nous devons délimiter l'enregistrement. Un point suffira (même si vous savez que vous pouvez appliquer CR/LF).

Une liste pourrait être:

Michael, 39 ans, Jordan.Shaquille, 40 ans, O'neal.Lebron, 24 ans, James.

ou avec CR/LF

Michael, 39 ans, Jordanie
Shaquille, 40 ans, O'neal
Lebron, 24 ans, James

Vous pouvez leur dire d'énumérer 10 joueurs nba (ou nlf) qu'ils aiment. Ensuite, ils doivent les taper selon un format. Faites ensuite un programme pour l'analyser et afficher chaque enregistrement. Un groupe, peut créer une liste dans un format séparé par des virgules et un programme pour analyser une liste dans un format de taille fixe, et vice versa.

3
user347594

En linguistique, diviser la langue en petites composantes analysables. Par exemple, analyser cette phrase impliquerait de la diviser en mots et en phrases et d'identifier le type de chaque composant (par exemple, verbe, adjectif ou nom).

L'analyse est une partie très importante de nombreuses disciplines informatiques. Par exemple, les compilateurs doivent analyser le code source pour pouvoir le traduire en code objet. De même, toute application qui traite des commandes complexes doit pouvoir analyser les commandes. Cela inclut pratiquement toutes les applications d'utilisateur final.

L'analyse est souvent divisée en analyse lexicale et analyse sémantique. L'analyse lexicale se concentre sur la division des chaînes en composants, appelés jetons, en fonction de la ponctuation et d'autres clés. L'analyse sémantique tente ensuite de déterminer la signification de la chaîne.

http://www.webopedia.com/TERM/P/parse.html

1
Razman

Pour moi, analyser consiste à décomposer quelque chose en parties significatives ... en utilisant un ensemble commun de définitions de parties définissable ou prédéfini.

Pour les langages de programmation, il y aurait des parties de mots clés, des séquences de ponctuation utilisables ...

Pour la tarte à la citrouille, cela pourrait être quelque chose comme la croûte, la garniture et les garnitures.

Pour les langues écrites, il peut y avoir ce qu'est un mot, une phrase, ce qu'est un verbe ...

Pour les langues parlées, cela peut être le ton, le volume, l'humeur, l'implication, l'émotion, le contexte

L'analyse de la syntaxe (ainsi que le bon sens après tout) dirait si ce que vous analysez est une citrouille ou un langage de programmation. At-il une croûte? c'est peut-être du pudding à la citrouille ou peut-être une langue parlée!

Une chose à noter à propos de l'analyse des choses est qu'il existe généralement de nombreuses façons de diviser les choses en plusieurs parties.

Par exemple, vous pouvez casser une tarte à la citrouille en la coupant du centre vers le bord ou du bas vers le haut ou avec une cuillère pour obtenir le remplissage ou en utilisant un marteau ou en le mangeant.

Et la façon dont vous analysez les choses déterminerait si faire quelque chose avec ces parties sera facile ou difficile.

Dans le monde des "langages informatiques", il existe des moyens courants d'analyser le code source du texte. Ces méthodes courantes (algorithmes) ont des titres ou des noms. Recherchez sur Internet des méthodes/noms courants pour analyser les langues. Wikipédia peut vous aider à cet égard.

1
DevPlayer

Explication simple: l'analyse consiste à diviser un bloc de données en morceaux plus petits (jetons) en suivant un ensemble de règles (en utilisant des délimiteurs par exemple), afin que ces données puissent être traitées processus par morceau (gérées, analysées, interprétées, transmises, ets) .

Exemples: de nombreuses applications (comme les programmes de feuille de calcul) utilisent le format de fichier CSV (Comma Separated Values) pour importer et exporter des données. Le format CSV permet aux applications de traiter ces données à l'aide d'un analyseur spécial. Les navigateurs Web disposent d'analyseurs spéciaux pour les fichiers HTML et CSS. Les analyseurs JSON existent. Tous les formats de fichiers spéciaux doivent avoir des analyseurs spécialement conçus pour eux.

0
Y-B