Αυτό που περιγράφεις λέγεται parsing, όχι scripting ή δυναμικό compiling. Και ένα από τα δυνατά σημεία της F# είναι το parsing . Τόσο το documentation της F# όσο και όλα τα βιβλία και tutorials για F# καλύπτουν σε κάποιο σημείο και πως μπορείς να φτιάξεις το δικό σου parser. Ουσιαστικά αυτό που θέλεις είναι να φτιάξεις ένα .ΝΕΤ expression tree από το κείμενο ενός function. Μπορεί να γίνει και με το χέρι, αλλά καλύτερα να χρησιμοποιήσεις κάποιο parser generator για να δημιουργήσεις τον κώδικα του parser από το συντακτικό που θέλεις.
Η ίδια η F# περιλαμβάνει εργαλεία όπως το fslex και fsyacc για τη δημιουργία parsers. Εναλλακτικά, μπορείς να χρησιμοποιήσεις μία βιβλιοθήκη για parsing όπως η FParsec η οποία είναι καθαρά F#. Με αυτή θα έχεις μάλλον πιο γρήγορα αποτελέσματα αλλά δεν θα μπορέσεις να καλύψεις όλες μα όλες τις δυνατότητες του ANTLR. Από την άλλη, το parsing ενός και μόνο function δεν απαιτεί κάτι εξωτικό.
Στα samples του source code θα βρεις και το "κλασσικό" παράδειγμα ενός απλού calculator το οποίο μπορεί να σε βοηθήσει να πάρεις μία ιδέα.
Υπάρχουν βέβαια και πιο "βαριές" λύσεις, όπως ο ANTLR, ένας από τους πιο διάσημους parser generators. Είναι ανεξάρτητο πρόγραμμα, μπορεί να καλύψει σχεδόν οποιαδήποτε γλώσσα αλλά θέλει και το διάβασμα του.
ΥΓ: Καλό είναι να ψάξεις μάλιστα μήπως υπάρχουν ήδη parsers για το είδος του function που χρειάζεσαι. Μία αναζήτηση και μόνο για F# math parser γυρίζει άπειρα παραδείγματα
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos