La construction d'un analyseur lexical en C
Je veux construire un analyseur lexical en C et je suis à la suite de la dragon livre, je peux comprendre la transition de l'état, mais comment les mettre en œuvre?
Est-il un meilleur livre?
Le fait que je dois analyser une chaîne à travers un certain nombre d'états, de sorte que je puisse savoir si la chaîne est acceptable ou pas!
en.wikipedia.org/wiki/Dragon_book ?
Vous devez nous donner un peu plus d'aller sur. Quel est l'aspect de la mise en œuvre des transitions d'état ne trouvez-vous difficile?
Pourquoi n'utilisez-vous pas LEX ?
y ne puis-je pas construire une lex??!!
"Est-il un meilleur livre?" Pas de.
Vous devez nous donner un peu plus d'aller sur. Quel est l'aspect de la mise en œuvre des transitions d'état ne trouvez-vous difficile?
Pourquoi n'utilisez-vous pas LEX ?
y ne puis-je pas construire une lex??!!
"Est-il un meilleur livre?" Pas de.
OriginalL'auteur Hick | 2009-06-15
Vous devez vous connecter pour publier un commentaire.
G'day,
En supposant que tu veux dire que Le Dragon livre sur la conception du compilateur, je vous recommande d'avoir un coup d'oeil autour de cette page sur compilateur outils.
La page elle-même est assez petite, mais a des liens par l'intermédiaire de diverses excellentes ressources sur les analyseurs lexicaux.
HTH
acclamations,
OriginalL'auteur Rob Wells
Vous pouvez mettre en œuvre de simples transitions d'état avec une seule variable d'état, par exemple si vous voulez parcourir les états->part1->part2->fin, alors vous pouvez utiliser un enum pour garder une trace de l'état actuel et l'utilisation d'une instruction switch pour le code que vous voulez exécuter dans chaque état.
Pour les plus complexes des transitions d'état qui dépendent de plusieurs variables, vous devez utiliser les tableaux/tableaux comme ceci:
Désolé, c'était une faute de frappe. l'état est le nom du type enum, mon_état est la seule variable utilisée ici.
OriginalL'auteur schnaader
Il y a plus d'une façon de le faire. Chaque expression régulière correspond directement à un simple programme structuré. Par exemple, une expression pour les nombres pourrait être ceci:
et le code C serait:
La transition de table façon de construire lexers est, à mon avis, inutilement compliqué, et évidemment plus lent.
Fixe. Je suppose que c'est accidentel restes dans le cas où j'ai voulu exclure le cas d'un stand-alone '.' en regardant vers l'avant. En d'autres termes, je devrais vraiment envelopper le tout dans le si(CHIFFRES(pc[0]) || (pc[0]=='.' && CHIFFRES(pc[1])))
OriginalL'auteur Mike Dunlavey
Si vous êtes à la recherche d'une plus modernes de traitement, que le dragon livre(s) : Andrew W. Appel et Maia Ginsburg, Moderne Compilateur mise en Œuvre en C, Cambridge University Press, 2008.
Le chapitre 2 se concentre sur l'Analyse Lexicale : Lexicale des jetons, des expressions Régulières, automates Finis; Automates Finis non déterministes; analyseur Lexical générateurs
Regarder la Table des Matières
OriginalL'auteur anno
Le programme flex (un clone de lex) va créer un analyseur lexical pour vous.
Donné en entrée un fichier avec l'analyseur lexical règles, il va produire un fichier C avec une mise en œuvre d'un analyseur lexical pour ces règles.
Vous pourrez ainsi vérifier la sortie de flex pour savoir comment écrire un analyseur lexical en C. C'est, si vous ne voulez pas seulement pour utiliser flex lexer...
mis à jour (supprimé des commentaires au sujet de GPL, mon mauvais, désolé). S'il vous plaît ne pas appeler les gens stupides. Il était un peu vexé, mais seulement au premier abord. Les bisons ont des problèmes avec le code généré, heureux de voir qu'ils ont ajouté un avertissement.
OriginalL'auteur Daren Thomas