Использование парсера jyang для конвертации файлов ян в инь

В настоящее время я делаю проект на парсере ян. Я натолкнулся на инструмент с открытым исходным кодом под названием "jYang", который является синтаксическим анализатором файлов Yang в Java. Я скачал исходные файлы и понял его процедуру, но я не знаю, как ввести файл Ян в анализатор. До сих пор я просматривал следующие веб-сайты, но не смог найти решение: https://hal.inria.fr/inria-00411261/file/yang.pdf http://jyang.gforge.inria.fr/JYang_Home_Page.html

1 ответ

Ниже приведен пример в разделе 4.3.2 "Программный доступ" по первой предоставленной вами ссылке, для ясности добавлены мои комментарии.

public static void main(String[] args) throws Exception {
    // Create a FileInputStream using a string with the path to your yang file
    FileInputStream yangfile = new FileInputStream(args[0]);
    // Pass the yang file input stream to the parser by calling its static constructor
    new yang(yangfile);
    // Run the parser on the yang file and store the result in spec
    YANG_Specification spec = yang.Start();
    // Call spec's functions to access it
    spec.check();
}

Глядя на исходный код, jYang предоставляет 4 различных статических конструктора, из которых вы захотите использовать 2-й или 3-й, чтобы указать кодировку вашего файла:

yang(java.io.InputStream stream);
yang(java.io.InputStream stream, String encoding);
yang(java.io.Reader stream);
yang(yangTokenManager tm);

Конструкторы jYang выдадут ошибку, если вы попытаетесь вызвать любой из них более одного раза. Разработчики заставили класс вести себя статически, используя статическую переменную состояния, которая отслеживает, были ли уже вызваны его конструкторы. Если вам нужно повторить синтаксический анализ файла или начать анализ нового файла yang, вам нужно будет использовать ReInit функция сопровождается Start функция.

// One of these 4
yang.ReInit(java.io.InputStream stream);
yang.ReInit(java.io.InputStream stream, String encoding);
yang.ReInit(java.io.Reader stream);
yang.ReInit(yangTokenManager tm);
// Followed by
YANG_Specification spec = yang.Start();
Другие вопросы по тегам