Grammaire:
Statement
= "{" __ !Statement Statement __ "}"
__
= [ \t\r\n]*
Contribution:
{x}
Avec le cache des résultats désactivé, ce qui précède produit cette erreur :
"{" ou [ \t\r\n] attendu mais "x" trouvé.
Lorsque le cache des résultats est activé, l'erreur devient :
Attendu [ \t\r\n] mais "x" trouvé.
Les erreurs doivent être les mêmes dans les deux cas.
Je m'appuie sur les lancers pegjs assez expressifs de SyntaxError
s pour construire la complétion de la syntaxe pour les utilisateurs.
Cependant, ce problème m'empêche de le faire pour des grammaires plus compliquées :
Une autre grammaire pour laquelle l'erreur s'applique :
Start
= Char+ End
End
= "e"
Char
= (!End [a-z])+
Contribution:
a
Avec le cache des résultats désactivé, ce qui précède produit cette erreur :
"e", [az] attendu ou pas "e" mais fin de l'entrée trouvée.
Lorsque le cache des résultats est activé, l'erreur devient :
[az] attendu mais fin de l'entrée trouvée.
L'erreur de désactivation du cache est correcte, car ae
correspond à la grammaire.
Échec des cas de test ajoutés avec # 555
La raison de ce problème semble être :
lors de l'évaluation initiale d'une règle, peg$expect
est appelé pour enregistrer les jetons attendus. Dans certains cas ( peg$silentFails > 0
) les jetons sont cependant ignorés.
pendant l' évaluation mise en peg$expect
. Sinon, il manque les jetons attendus. Cela se manifeste dans les messages d'erreur incomplets vus ci-dessus.
Dans un prototype local basé sur [email protected]
j'ai pu résoudre ce problème en enregistrant et en rejouant les appels à peg$expect
. Cependant, avec les changements introduits dans https://github.com/pegjs/pegjs/commit/669f782a5f3928a2958147992eb07df5b0ecf54a, ces choses sont devenues beaucoup plus compliquées.
Je pourrais tenter un correctif pour pegjs@dev
. Je me demande juste si je vais dans la bonne direction.
Des commentaires @Mingun , @futagoza ?
Pouvez-vous me montrer votre prototype local basé sur [email protected]
?
Vous pouvez consulter un correctif ici .
Cela ne fonctionne pas encore correctement pour les éléments silencieux imbriqués :
Grammaire:
Start
= Char+ End
End "end"
= "e"
Char
= !End [a-z]'
Contribution:
a
Message attendu :
Fin attendue, ou [az] mais fin de l'entrée trouvée.
Message réel :
Fin attendue, "e" ou [az] mais fin de l'entrée trouvée.
Cf. cas de test en échec .
@nikku Cela devrait être résolu maintenant (merci à vous 🙇 ), avec les 3 cas de test réussis (y compris le 3ème pour les éléments silencieux imbriqués).
Le correctif est présent dans la dernière version pegjs@dev
est juste poussé vers NPM, [email protected]
(https://github.com/pegjs/pegjs#latest).
Merci.
J'ai testé vos modifications aujourd'hui.
D'après ce que je vois https://github.com/pegjs/pegjs/commit/f5b323b40124e9ebe1336b509af0716d5a31ce55#diff -cd2c6b13fdcedf68a390c8bb6ea65cafR148 introduit un changement de rupture, car il élimine efficacement le peg$silentFails === 0
garde avec --no-cache
parseurs générés .
oups, c'était une erreur stupide. Je vais régler ça bientôt, merci pour l'avertissement
J'ai essayé de créer un cas de test mais a échoué : cry:. Je vois cependant que cette ligne a un impact sur l'une de mes grammaires les plus compliquées.
Restauré la garde dans https://github.com/pegjs/pegjs/commit/d06a5b52efcf0fa4b9e5bf21f97607786c1c7db5 et poussé les modifications à pegjs@dev
, dites-moi si cela résout le problème
@nikku Est-ce résolu ou rencontrez-vous toujours ce problème ? Je veux juste savoir si je dois rouvrir ce problème.
C'est réparé.
@nikku - Ce n'est pas corrigé. Rien n'a été libéré. npm
toujours 0.10.0
, et cela a été fusionné avec une branche de fonctionnalité 0.11.0
qui, selon ryuu, ne sera jamais réellement publiée
J'ai cessé d'espérer des pegjs et j'ai cherché ailleurs il y a longtemps exactement pour cette raison.
Pas de version = personne ne peut réellement l'utiliser. Pegjs a été historiquement mauvais avec les sorties.
J'espère changer le cycle de libération des chevilles en :
0.12.0
partir de 0.10.0
,0.11.0
maintenant morte,Si quelque chose comme ça se produisait, sous n'importe quel jeu de mains, puis que les sorties commençaient réellement, lui donneriez-vous une autre chance ?
Je vous souhaite bonne chance pour y parvenir.
merci
On verra.
Commentaire le plus utile
Vous pouvez consulter un correctif ici .