1

我正在为上下文无关语法实现 CYK 解析算法。

然而,困难的部分是我需要在 XSL(一种函数式语言)中执行此操作,而不是我非常熟悉的更程序化的语言 - 例如 Java。

我在 Java 中有一个算法的工作实现,但我想将它转换为 Xsl

   public boolean processString(String w) 
   // a string of any length like "aabaaba" or "my cat eats fish"
   {
        int length = w.length();
        table = new ArrayList[length][];
  for (int i = 0; i < length; ++i)
  {
        table[i] = new ArrayList[length];
        for (int j = 0; j < length; ++j)
          table[i][j] = new ArrayList < String > ();
  }
  for (int i = 0; i < length; ++i)
  {
     Set<String> keys = terminals.keySet();
     for (String key : keys)
     {
        if (terminals.get(key).charValue() == w.charAt(i))
           table[i][i].add(key);
     }
  }
  for (int l = 2; l <= length; ++l)
  {
     for (int i = 0; i <= length - l; ++i)
     {
        int j = i + l - 1;
        for (int k = i; k <= j - 1; ++k)
        {
           Set<String> keys = variables.keySet();
           for (String key : keys)
           {
              String[] values = variables.get(key);
              if (table[i][k].contains((values[0]))
                    && table[k + 1][j].contains(values[1]))
                 table[i][j].add(key);
           }
        }
     }
  }
  if (table[0][length - 1].contains(startVariable))
     return true;
  return false;
  }

任何帮助将不胜感激。提前致谢。

4

0 回答 0