Javaでは、構文マッチャーを作成したいと思います。
にとってstring1: a = a+b, and string2: c = c+d, syntax_matcher(string1,string2) = true.
でも、if string1 : a > 0; string2 : c == 0, syntax_matcher(string1,string2) = false.
何かアイデア、それを効率的に行う方法は?
Javaでは、構文マッチャーを作成したいと思います。
にとってstring1: a = a+b, and string2: c = c+d, syntax_matcher(string1,string2) = true.
でも、if string1 : a > 0; string2 : c == 0, syntax_matcher(string1,string2) = false.
何かアイデア、それを効率的に行う方法は?
おそらく、あなたができることはStack
、最初のステートメントに対して and を記述して、左から右に移動し、 then 、 then 、 then のような値をVAR
プッシュASSIGNMENT
するVAR
ことOPERATOR
ですVAR
。
それができたら、2 番目の式から始めて、right から leftに移動し、持っているものとスタックからポップしたものを比較するたびにできます。
読んでいるものとポップしたものとの間に不一致があると、false
.
LR パーサー (ウィキペディア)を使用して式を解析します。これは、おそらく文脈自由言語であるためです。Java の場合は、CUP オープンソース パーサー ジェネレーターなどを使用することをお勧めします。
次に、好みのツリー比較方法を使用して、結果の構文ツリー (Wikipedia)を比較します。
正規言語と文脈自由言語の区別については、Chomsky Hierarchy (Wikipedia)を参照してください。