Как определить и извлечь простые вложенные токены с помощью лексера BNF?
Я понятия не имею, как получить документацию об этом. Я только что обнаружил, что большинство компиляторов используют форму Бэкуса-Наура для описания языка.
От Marpa::R2
Пакет Perl, получите этот простой пример, который разбирает арифметические строки, такие как 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
}
Было бы хорошим началом для меня?
1 ответ
Решение
Существует XML-парсер с открытым исходным кодом, основанный на Marpa.