我正在为上下文无关语法实现 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;
}
任何帮助将不胜感激。提前致谢。