je cherchais à analyser simplement le code Lisp/comme systèmeBuilding Lisp/Scheme comme arbre d'analyse syntaxique flex/bison
E.g. (func a (b c d))
et construire un arbre de celui-ci, je pourrait faire l'analyse syntaxique dans C sans utiliser bison
(c'est-à-dire, en utilisant seulement flex
pour renvoyer des jetons et construire l'arbre avec récursivité). Mais, avec la grammaire bison
, je ne suis pas sûr où ajouter le code à construire la liste (i.e., qui règle à associer à la borne accumuler symboles et où lier une liste intégrée au nœud parent).
Ma grammaire est similaire à celle-ci: Lisp grammar in yacc la grammaire est correcte et peut reconnaître le code.
J'ai repassé de 'flex' à' gnu-flex' malgré le contre-conseil ici: http://meta.stackexchange.com/questions/26460/tag-for-two-flexes/26708#26708 simplement parce que c'est déroutant à de nombreux visiteurs sur le site pour voir l'icône Adobe sur l'étiquette. J'espère que cela sera réglé bientôt. Bonne chance d'avoir une réponse à votre question. – bernie
Vous n'avez pas besoin de flex ou de bison pour analyser des expressions S simples. Vous devriez être capable de coder ceci comme un simple analyseur de descente récursif avec une lexer roulé à la main pour les atomes, les parenthèses et un skipper d'espace blanc dans quelque chose comme une centaine de lignes de C ou moins. Les interpréteurs LISP originaux l'ont fait avec seulement un tout petit peu de code. –
Ira: Vraie à propos de l'inutilité d'un analyseur, mais "lexer roulé à la main" ne fonctionne que pour les sous-ensembles de jouets habituels auxquels les gens se retrouvent habituellement. Certains Lisps/Schemes ont des jetons qui peuvent être très poilus. Pour votre divertissement, voici un exemple de constante numérique valide dans [Racket] (http://racket-lang.org/): '# e # x + e # s + e @ -e # l-e'. –