この(私はC#でこれを実行する方法を知りませんが、あなたはPythonの式として、あなたの表現を与える場合のpythonは、ここであなたを助けることができる非常に強力な構文木・アナライザ(ASTモジュール)を持っていますそれほど難しくないので、 '*'の乗算記号を追加するだけです:-))。
まず、(数が満たされたときに、visit_Num
ここで我々は唯一の識別子をしたい、などと呼ばれる別の1 visit_Expr
を表現するために呼ばれ、たとえば、識別子のために呼ばれる)のみvisit_Name
メソッドを再定義の良いクラスを定義します。
が
>>> def visit(expression):
node = ast.parse(expression)
v = MyVisitor()
v.visit(node)
print v.identifiers
それはOKになります:ASTため
>>> visit('x + 4 * sin(t)')
['x', 't']
>>> visit('5*x + 7^sin(z)/2*T + 44')
['x', 'z', 'T']
使用のpython 2.6または2.7
>>> import ast
>>> class MyVisitor(ast.NodeVisitor):
def __init__(self, *args, **kwargs):
super(MyVisitor, self).__init__(*args, **kwargs)
self.identifiers = []
def generic_visit(self, node):
ast.NodeVisitor.generic_visit(self, node)
def visit_Name(self, node):
# You can specify othe exceptions here than cos or sin
if node.id not in ['cos', 'sin']:
self.identifiers.append(node.id)
は、その識別子あなたを与えるために式を取り、迅速関数を定義しますモジュール。
、この[Q&A]を参照してください(http://stackoverflow.com/questions/4396080/antlr-3-3-c-tutorials)。 –
[可能な数式を評価するための最善のアルゴリズム?](http://stackoverflow.com/questions/572796/best-algorithm-for-evaluating-a-mathematical-expression)の複製が可能です。 –