# I need my NSTextFields be able to evaluate formulas...

 It would be very nice for my customers to enter math formulas in text fields, how to achieve this in Cocoa ?
-(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor; to know if editing could be ended: you could design such a delegate that will parse the text and replace it by the result (or an error message is something goes wrong).
But how fo you evaluate a formula would you ask ?
This is a parsing problem and the solution depends on the complexity of the formula language you want to offer to your users. If you limit yourself to
+,-,*,/ operations without parenthensis, it's quite easy to parse the string token by token to calculate the result.
If you want something more sophisticated you can use
/usr/bin/yacc to generate the code of the parser from a grammar definition. Here is an example supporting some basic math function like tan, sqrt and exponentiation operator ^.
%{

#include
#include

int yyparse(void);
void yyerror(char *);
int yylex(void);

#define YYTRACE
#define YYSTYPE double
#define kPI (3.1415926535897932384626433832795)

#define YYACCEPT { yyresult = yyval ; return(0); }

extern YYSTYPE yyresult ;

int last=0;
%}

%left '+' '-'
%left '*' '/'
%left '^'
%nonassoc UMINUS
%nonassoc UPLUS

%token NUMBER, SIN, COS, TAN, ASIN, ACOS, ATAN, ATAN2, POW, PI, SQRT

%%

start : /* Nothing */
{ \$\$ = 0.0; }
| expr
{ \$\$ = \$1; }
;

expr : NUMBER { \$\$ = \$1 }
| function_call { \$\$ = \$1 }
| PI { \$\$ = kPI }
| '(' expr ')' { \$\$ = \$2 }
| expr '+' expr { \$\$ = \$1 + \$3 }
| expr '-' expr { \$\$ = \$1 - \$3 }
| expr '*' expr { \$\$ = \$1 * \$3 }
| expr '/' expr { \$\$ = \$1 / \$3 }
| expr '^' expr { \$\$ = pow (\$1, \$3) }
| '-' expr %prec UMINUS { \$\$ = -\$2 }
| '+' expr %prec UPLUS { \$\$ = \$2 }
;

function_call : SIN '(' expr ')'
{ \$\$ = sin( \$3 ) }
| COS '(' expr ')'
{ \$\$ = cos( \$3 ) }
| TAN '(' expr ')'
{ \$\$ = tan( \$3 ) }
| ASIN '(' expr ')'
{ \$\$ = asin( \$3 ) }
| ACOS '(' expr ')'
{ \$\$ = acos( \$3 ) }
| ATAN '(' expr ')'
{ \$\$ = atan( \$3 ) }
| ATAN2 '(' expr ',' expr ')'
{ \$\$ = atan2(\$3,\$5) }
| POW '(' expr ',' expr ')'
{ \$\$ = pow(\$3,\$5) }
| SQRT '(' expr ')'
{ \$\$ = sqrt(\$3) }
;
%%
 There are several solutions:- NSTextField are validated and formated by NSFormater objects: to make your NSTextField accept math formulas, you may write a NSFormater subclass that will evaluate the formula and returns the value as the object value.- NSTextField calls its delegate's method