根据RNG模式进行XML自动补全

问题描述

RNG一个宽松的NG规范,XML一个相对于RNG的有效XML文档,指定n是该字符的第n个字符XML文档,B的{​​{1}}节点和XML XML文档,其中节点XML[n = B]插入字符B处。>

我想这样定义一个函数n

  • 对于任何suggest(RNG,XML,n) → {Node} = OB ∈ O是相对于XML[n = B]的有效XML文档,并且
  • 对于任何RNGC ∉ O 无效有效。

目前,我尝试了两种方法

  1. XML[n = C]XML的元素RNG上使用双递归,其中元素XML[n]包含字符和RNG n {{ 1}}与<element>匹配,并返回元组RNG[n],然后根据这两个元素决定下一步返回什么。例如,如果当前的XML[n]节点是(boolean,suggestions)RNG间的选择,则如果A为true而B为false,则返回{{1} },如果它们都为假,则fn(A)[0],如果它们都为真,则……fn(B)[0]可能还不错,但肯定并不总是正确的答案。

  2. 使用带有四个堆的“状态机”(例如(true,fn(A)[1])(false,[])的孩子,(true,fn(A)[1] + fn(B)[1])*r的孩子,{{ 1}}包含正在解决的当前选项,RNG[n]包含输出建议),这样

  • 如果*x等于XML[n],则弹出*c*s,如果*r不等于*x,则弹出{{ 1}},然后将其推入*r
  • 如果*x*r*x间的选择,则按*r中的*s并按{{1}中的*r }。
  • 如果A是引用,则将其弹出并推送匹配的定义(如果它是一个定义,则将其作为一个组进行处理,
  • 如果B一个组,则将其元素推到(*r,*x,B,null)
  • 如果*c等于A,并且*r一个节点,则将其弹出,将*r*r设置为*r和{ {1}},分别在*c[0]中推*r
  • 如果*c[2]等于*r并且*x为空,则将其弹出,比较*c[2],*c[0]*c[1],然后确定)。
  • 根据选择和分组简化其他节点(不是很困难),以使它们只有两个元素。

但两者都没有那么成功:

  1. 在大型模式下,a都很慢
  2. 一个错误经常由于递归过多而失败,特别是如果RNG包含多个(*r,null,*s),并且检查无限循环也变得非常困难。
  3. 第二个使用大量内存,因为我必须在遇到的每个*c上深度复制每个XML节点。
  4. 由于可能的案例数量众多,笔试很难,而且我找不到一种以编程方式生成它们的方法。因此,实际上,我什至不确定我的函数是否会生成有效的XML文档。
  5. 我仍然不清楚我应该如何处理*c[0]。例如,以*r为例:我应该如何编码,以便建议所有个有效节点?

我知道有多个编辑器(例如Emacs的http://www.thaiopensource.com/nxml-mode/)提供了此选项,但是我不确定他们确实会生成有效的文档,而且我对阅读Lisp并不熟悉。

所以我正在寻找一种在DOM上实现此目标的“好方法”,或者甚至更好的JavaScript库来实现这一目标。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...