質問
私は正規表現と線形方程式を検証したり、正規表現を使用した以外にも、別の方法があることができますどのように
。私は、指数を表すために、^使用されます。
2X + 3 = 8 //これは罰金を検証する必要があります。
3倍+ 2Y + 4Z = 12 //これは罰金を検証する必要があります。
の4x ^ 2 + 2Y = 22 //これが原因で、電源の検証べきではありません。
4XY + 3Y = 45 //これが原因で2つの未知数の製品を検証してはいけません。
2 / X + 4Y = 22 //これが原因で分母に不明の検証べきではありません。
(3/4)X + 3Y + 2Z = 40 //これは罰金を検証する必要があります。
解決
私はバッカスを使用して、有効な線形方程式の定義を書くことから始めたいです以下のようなもので-Naur の表記ます:
<integer> := <digit> | <integer> <digit>
<constant> := <integer> | ...
<variable> := <letter>
<term> := <constant> | <variable> | <constant> <variable>
のように。
バリにそれを回すために多くの方法があります。それにいくつかの経験を持って、私は入力が有効な線形方程式だった場合のみ、構文解析ツリーを生成するパーサを書くことYACCやバイソンを使用すると思います。
あなたは正規表現があまりにもあなたが必要なものを行うには限定されているかもしれません - 私は十分に知っているためにそれらを使用しないでください。
。他のヒント
あなたが言及した例は簡単です:
fail if /[xyz]\s*\^/;
fail if /\/\s*[xyz]/;
fail if /([xyz]\s*){2,}/;
(これは$_
式が含まれていると仮定すると、Perlの構文で、fail
が、それはあなたがあきらめたい時にあなたがあるものは何でもある。)
ここでは、1つの変数の有効な表現であるものは何でもしてxyz
を置き換えることができます。
しかし、一般的に、これはLEX / yaccのか、そのようなものではなく、正規表現ます。
のための仕事で表現、実際の解析が必要になりますたとえば、「xyは」正当な変数名であれば、もちろん、このすべてのクランブルます。
所属していません StackOverflow