J'essaie de diviser une chaîne d'équation en jetons. J'ai trouvé un bon point de départ »([A-Za-z] + | [0-9.] + | [& => < \ |!] + | \ S) '. Cependant, cela a du mal avec les nombres négatifs:équation mathématique tokenizing utilisant regex
turns: '5--4=sin(2+3)'
into: ['5','-','-','4','=','sin','(','2','+','3',')']
want: ['5','-','-4','=','sin','(','2','+','3',')']
et aussi
turns: -3+3
into: ['-','3','+','3']
want: ['-3','+','3']
Il ressemble à un mon regex pourrait utiliser quelque chose qui vérifie s'il y a un numéro à gauche du « - » si ne pas le garder avec le prochain numéro (note '-3' n'a rien à gauche). Peut-il être fait en utilisant regex? Ou y a-t-il un meilleur outil pour diviser cela en .NET?
Oh viens, regex est parfaitement adapté pour lexique - c'est un problème de Chomsky type 3. OP ne réalise pas que le résultat qu'il a obtenu est réellement * exactement * ce dont il a besoin. dans '-'' 3', le '-' est en fait l'opérateur de négation unaire. –
@LucasTrzesniewski Bien sûr, regex est parfaitement adapté au lexique, mais OP veut que son lexique soit sensible au contexte. Il veut que deux "-3-3" soient traités différemment, ce qui n'est ni ce qu'il veut ni ce que regex peut fournir. – dasblinkenlight
Oui, après avoir lu votre réponse pour la deuxième fois maintenant, j'ai compris ce que vous vouliez dire. BTW un générateur de lexer ne résoudra pas simplement le problème par magie, la plupart utilisent juste regex sous le capot;) –