Реализация XML-транслятора с использованием XML EBNF
-
21-09-2019 - |
Вопрос
Я обдумываю идею реализации XML-транслятора с использованием генератора компилятора на основе W3C. XML 1.1 спецификация, которая включает полную грамматику EBNF.
Точнее, я планирую использовать Ци-YACC потому что я хочу изучить этот инструмент.Это будет мой первый опыт использования любого компилятора-компилятора.
Первый вид перевода, который я планирую реализовать, очень прост:XML в S-EXPR.Дальше я планирую обобщить своего переводчика, но суть моего вопроса не в этом.
Ожидаете ли вы каких-либо серьезных подводных камней в этом проекте? Я читал, что перевод XML с использованием его EBNF плохая идея.Интересно, почему.И это не значит, что в языке Qi уже был синтаксический анализатор XML, поэтому я определенно не собираюсь здесь изобретать велосипед.
Решение
Я не понимаю, почему для анализа XML необходим контекст.
Но QiYacc может использовать контекст, используя глобальные переменные.Было бы чище, если бы вы могли пройти государство, S, в анализаторе, например,или что-то вроде того.В Ци этого нет, но я планирую реализовать такую возможность для Шена.
Так что это можно было сделать.
/Стефан
Другие советы
Я ничего не знаю о Qiyacc, однако перевод EBNF XML в рекурсивный спуск (RD) сияет более или менее прост. Просто нужно помнить тот факт, что есть места, где некоторые небольшие изменения в грамматике могут оказать большое влияние на анализатор. Это связано с тем, что грамматики написаны с краткостью и ясностью, а не пытаются избежать преследования правил.
Я сделал что -то подобное один раз в C ++, написав грамматику XML как набор типов. Вы можете увидеть статью, которую я написал на ней Кодовый проект. Анкет Те же основные принципы могут применяться к любому языку.
Я также предложил бы вам посмотреть на GEAG Grammarmars. Они распространяются на EBNF, позволяя вам представить утверждения по ширине нулевой ширины, и являются отличным способом увеличить грамматику EBNF для анализатора.