Как идентифицировать и извлечь простые вложенные токены с помощью лексера BNF?

Я понятия не имею, как получить документацию об этом. Я только что обнаружил, что большинство компиляторов используют форму Бэкуса-Наура для описания языка.

Из perl-пакета Marpa::R2 возьмите этот простой пример, анализирующий арифметические строки, такие как 42 * 1 + 7:

:default ::= action => [name,values]
lexeme default = latm => 1

Calculator ::= Expression action => ::first

Factor ::= Number action => ::first
Term ::=
    Term '*' Factor action => do_multiply
    | Factor action => ::first
Expression ::=
    Expression '+' Term action => do_add
    | Term action => ::first
Number ~ digits
digits ~ [\d]+
:discard ~ whitespace
whitespace ~ [\s]+   

Я хотел бы изменить это, чтобы рекурсивно анализировать образец XML, такой как:

<foo>
    Some content here 
    <bar>
        I am nested into foo
    </bar>
    A nested block was before me.
</foo> 

И выразить это в чем-то вроде:

>(Some content here)
>>(I am nested into foo)
>(A nested block was before me)

Где я могу использовать эту функцию:

sub block($content, $level) {
    for each $content line
        $line = (">" x $level).$content
    return $content
}

Было бы хорошим началом для меня?


person nowox    schedule 30.06.2015    source источник
comment
Существует синтаксический анализатор XML на базе Marpa с открытым исходным кодом — github.com/jddurand/MarpaX. -Языки-XML-AST   -  person Jeffrey Kegler    schedule 30.06.2015
comment
и metacpan.org/pod/distribution/Marpa-R2/html. /pod/HTML.pod тоже может помочь   -  person rns    schedule 01.07.2015


Ответы (1)


Существует открытый анализатор XML на основе Marpa.

person Jeffrey Kegler    schedule 30.06.2015