Esto no es algo simple de hacer, en realidad, es algo difícil. Necesita un analizador gramatical completo, combinado con constantes/funciones predefinidas (sin
, log
, pi
, etc.).
Si no tiene una amplia experiencia previa con CI, esto no sería recomendable, pero si realmente desea hacerlo, consulte recursive descent parsing, que es posiblemente la manera más fácil de hacerlo (sin poner una carga sobre el usuario, como el pulido inverso notación).
Por último pero no menos importante, usted dice que desea crear una C función desde la entrada generada por el usuario. Esto es casi siempre algo incorrecto: generar código a partir de la entrada del usuario, en cambio, el enfoque más fácil es el preprocesamiento para crear una representación intermedia que se puede ejecutar de manera eficiente.
Eche un vistazo a la documentación de Bison, hay [ejemplos] (http://www.gnu.org/software/bison/manual/html_node/Infix-Calc.html#Infix-Calc) que lo guiarán. –
posible duplicado de http://stackoverflow.com/questions/1151127/evaluating-mathematical-expressions, [¿Qué es un analizador matemático rápido C o Objective-C?] (Http://stackoverflow.com/questions/4892152/what -is-a-fast-c-or-objective-c-math-parser), http://stackoverflow.com/questions/5115872/what-is-the-best-way-to-evaluate-mathematical-expression- in-c/5117028 # 5117028, http://stackoverflow.com/questions/4071456/opensouce-cc-math-expression-parser-library/4071701#4071701, y muchos otros. – lhf
Pruebe [TinyExpr] (https://github.com/codeplea/tinyexpr). Está en un solo archivo de código fuente y encabezado. – 131