Je cherche à implémenter le Shunting-yard Algorithm, mais j'ai besoin d'aide pour déterminer quelle est la meilleure façon de diviser une chaîne en ses jetons.Existe-t-il un moyen simple de marquer une chaîne sans un lexer complet?
Si vous remarquez, la première étape de l'algorithme est "lire un jeton". Ce n'est pas exactement une chose non triviale à faire. Les jetons peuvent être composés de nombres, d'opérateurs et de parens.
Si vous faites quelque chose comme:
(5 + 1)
Un string.split simple() va me donner un tableau des jetons { "(", « 5 "," + "," 1 ",") "}.
Cependant, il devient plus compliqué si vous avez des nombres avec plusieurs chiffres tels que:
((2048 * 124) + 42)
maintenant un string.split naïf() gagné Ne fais pas l'affaire. Les numéros à plusieurs chiffres sont un problème.
Je sais que je pourrais écrire un lexer, mais y a-t-il un moyen de le faire sans écrire un lexer à part entière? Je l'implémente en JavaScript et je voudrais éviter d'avoir à descendre le lexer-path si possible. Je vais utiliser les opérateurs "*", "+", "-" et "/", ainsi que les entiers.
Tout ce qui convertit correctement un flux de caractères en flux de jeton * est * un lexer. –