g'day!
Comment puis-je construire une simple manipulation de la grammaire d'anti-grammaire d'expressions multilignes sans la nécessité des points-virgules ou des backslashes? p>
J'essaie d'écrire une simple DSLS pour les expressions: p> globalement, je veux que mon application fournisse le script avec des valeurs initiales nommées et Sortez le résultat final. Je suis raccroché sur la syntaxe, cependant. J'aimerais prendre en charge plusieurs expressions de ligne telles que celles suivantes: p> warning(200): StackOverflowQuestion.g:11:20: Decision can match input such as "NL" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
3 Réponses :
Je laisserais votre tokéniseur faire la forte levée plutôt que de mélanger vos règles nouvelles règles dans votre grammaire:
Comptez des parenthèses, des supports et des accolades, et ne générez pas de jetons NL pendant qu'il existe des groupes non récoltés. Cela vous donnera des continits de ligne gratuitement sans que votre grammaire soit le plus sage. P> li>
génère toujours un jeton NL à la fin du fichier si la dernière ligne se termine ou non avec un caractère Le deuxième point vous permettrait de simplifier votre grammaire à quelque chose comme ceci: p> '\ n' code>, alors vous n'avez pas à vous soucier d'un cas particulier d'une déclaration sans NL. Déclarations
Maintenant, je dois savoir comment obtenir le tokéniseur de faire ce levage lourd. Retour à la documentation, je suppose. :)
John, ça me échappe toujours. Quelle est la syntaxe de grammaire d'anti-grammaire pour que le tokéniseur insert NL avant EOF?
+1 Pour toujours se terminant sur une nouvelle ligne, rend les choses tellement plus propres. Merci.
Que diriez-vous de cela?
Je suppose que vous avez choisi de faire NL facultatif, car la dernière instruction de votre code d'entrée ne doit pas être terminée avec une nouvelle ligne. P>
Bien que cela ait beaucoup de sens, vous rendez la vie beaucoup plus difficile pour votre analyseur. Les jetons de séparateur (comme NL) doivent être chéris, comme ils désambiguent et réduisent les risques de conflits. P>
Dans votre cas, l'analyseur ne sait pas s'il devrait analyser "assignation nl" ou "cessionnaire vide_line". Il existe de nombreuses façons de le résoudre, mais la plupart d'entre eux ne sont que des bandes d'aides pour un choix de conception imprudent. P>
Ma recommandation est un piratage innocent: faire NL obligatoire et toujours ajouter NL à la fin de votre flux d'entrée! P>
Cela peut sembler un peu peu recommandable, mais en réalité, il vous évitera beaucoup de maux de tête futurs. P>