Для каждого в XSL - переменные? рекурсии? - PullRequest
1 голос
/ 08 декабря 2011

Я не привыкла к функциональному программированию и мне сложно найти простое для каждого цикла.

У меня есть это в руках, и мне нужно исправить тот же алгоритм в 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

Я могу сделать что-то, но я чувствую себя застрявшим и иду по неправильному пути.

Я узнал, что у меня не может быть что-то вроде массивов. Даже если я создаю переменную, которая действует как массив, я не могу ее обновить.

Итак, я начал делать некоторые рекурсии (вызывая шаблоны), но я все еще думаю, что это правильный путь. И если есть другое, зачем внедрять эти вложенные для каждого без рекурсии ..

1 Ответ

0 голосов
/ 08 декабря 2011

В XSLT вам гораздо лучше, если вы не используете xsl:for-each.

Возможно, вы захотите увидеть общий парсер LR (1), полностью написанный на XSLT 2.0, который я реализовал в 2007 . Он является частью FXSL и может быть просмотрен здесь: http://fxsl.cvs.sourceforge.net/viewvc/fxsl/fxsl-xslt2/f/func-lrParse.xsl?view=markup

Я написал два довольно сложных парсера, один для JSON (см. http://fxsl.cvs.sourceforge.net/viewvc/fxsl/fxsl-xslt2/f/func-json-document.xsl?revision=1.11&view=markup)

и еще один, гораздо более сложный, для XPath 2.0 (в грамматике 209 правил).

Базовым инструментом является модифицированный YACC, который создает таблицы синтаксического анализа для конкретной грамматики LR (1) в виде документов XML. Затем они вместе со входной строкой передаются в реализацию XSLT общего синтаксического анализатора LR (1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...