Question

Je cherche à mettre en œuvre le -cour algorithme Manœuvre , mais je dois une aide pour déterminer quelle est la meilleure façon de diviser une chaîne en ses jetons est.

Si vous remarquez, la première étape de l'algorithme est « lu un jeton. » Ce n'est pas exactement une chose non négligeable à faire. Les jetons peuvent se composer de numéros, les opérateurs et les parens.

Si vous faites quelque chose comme:

  

(5 + 1)

Un string.split simple () me donnera un tableau des jetons { "(", "5", "+", "1", ")"}.

Cependant, il devient plus compliqué si vous avez des nombres avec plusieurs chiffres tels que:

  

((2048 * 124) + 42)

un string.split naïf () ne fera pas l'affaire. Les numéros à plusieurs chiffres sont un problème.

Je sais que je pourrais écrire un lexer, mais est-il un moyen de le faire sans écrire une lexer entière?

Je suis dans la mise en œuvre de cette JavaScript et je voudrais éviter d'avoir à aller sur le chemin de Lexer si possible.  Je vais utiliser le "*", "+", "-". Et les opérateurs "/", ainsi que des entiers

Était-ce utile?

La solution

Que diriez-vous des expressions régulières? Vous pouvez facilement écrire regex à scinder la façon dont vous voulez, et la méthode JS string.split accepte regex comme paramètre trop.

Par exemple ... (modifier pour inclure tous les caractères dont vous avez besoin, etc.)

/([0-9]+|[*+-\/()])/

Autres conseils

Vous pouvez utiliser une correspondance globale comme décrit à http: //mikesamuel.blogspot.com/2009/05/efficient-parsing-in-javascript.html

En gros, vous créez un regex qui décrit un jeton

/[0-9]+|false|true|\(|\)/g

et mettre le « g » à la fin il correspond globalement, puis vous appelez sa méthode de correspondance

var tokens = myRegex.match(inputString);

et retourner un tableau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top