2011-12-08 10 views
1

私は関数型プログラミングに慣れておらず、それぞれのループに対して単純な計算が難しい時代です。それぞれの変数はXSL?再帰?

私はこれを手にしており、xslで同じアルゴリズムを正しく実行する必要があります。

let the input be a string S consisting of n characters: a1 ... an. 
let the grammar contain r nonterminal symbols R1 ... Rr. 
This grammar contains the subset Rs which is the set of start symbols. 
let P[n,n,r] be an array of booleans. Initialize all elements of P to false. 
for each i = 1 to n 
    for each unit production Rj -> ai 
    set P[i,1,j] = true 
for each i = 2 to n -- Length of span 
    for each j = 1 to n-i+1 -- Start of span 
    for each k = 1 to i-1 -- Partition of span 
     for each production RA -> RB RC 
     if P[j,k,B] and P[j+k,i-k,C] then set P[j,i,A] = true 
if any of P[1,n,x] is true (x is iterated over the set s, where s are all the indices for Rs) then 
    S is member of language 
else 
    S is not member of language 

私は何かをすることができますが、私は固執して間違った方法で行っていると感じます。

私は配列のようなものを持つことができないことを知りました。私は配列のように私はそれを更新することはできません動作する変数を作成します。

私は(テンプレートを呼び出すことによって)いくつかの再帰を始めましたが、正しい方法であれば私はまだ考えています。そして、再帰なしでそれぞれのためにネストしたものを実装する別の理由がある場合。

+2

あなたはそうです:プロシージャアルゴリズムの説明から機能プログラムをリバースエンジニアリングするのは難しいです。アルゴリズムを捨てる方がはるかに優れており、アルゴリズムが達成しようとしていることの説明から始めてください。 –

答えて

0

XSLTでは、xsl:for-eachを使わない方がずっと良いでしょう。

私は2007年に実装したXSLT 2.0で完全に書かれた一般的なLR(1)パーサーを見ることができます。それは、FXSLの一部であり、ここで見ることができます:http://fxsl.cvs.sourceforge.net/viewvc/fxsl/fxsl-xslt2/f/func-lrParse.xsl?view=markup

私は2つの非常に複雑パーサ1を書かれているJSONは、XPath 2.0のためである、はるかに複雑、

、別の(http://fxsl.cvs.sourceforge.net/viewvc/fxsl/fxsl-xslt2/f/func-json-document.xsl?revision=1.11&view=markupを参照)されました(文法には209の規則があります)。

基本的なツールは、XML文書として特定のLR(1)文法の解析テーブルを生成する変更されたYACCです。これらは、入力文字列と共に一般的なLR(1)パーサーのXSLT実装に供給されます。

関連する問題