1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/fawdlstty-Facc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Facc

Facc — это инструмент языка с собственным синтаксисом, который позволяет описывать грамматику с помощью минималистичной грамматики и автоматически генерировать код AST.

Особенности:

  • предоставляет реализации на C++ и C#, которые могут генерировать код парсера для языков C++ и C#;
  • поддерживает левую рекурсию и косвенную левую рекурсию.

Введение

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

Начало работы

Сначала установите Facc через NuGet.

Чтобы сгенерировать AST, используйте следующий код:

var _grammar = @"   // 语法描述字符串
                    // 方括号 обозначают соответствие любому символу
num                 ::= [0-9]+
                    // одинарные или двойные кавычки обозначают соответствие всей строке, «|» обозначает отношение «или», соответствует любой строке
op2_sign            ::= '+' | '-' | '*' | '/'
                    // пробел обозначает соединение «и», все элементы должны существовать одновременно
op0_expr            ::= '(' expr ')'
                    // соответствует строке типа 1+2*3-4
op2_expr            ::= expr (op2_sign expr)+
                    // выражение допускает только числа, скобки или строки операций с четырьмя операциями
expr                ::= num | op0_expr | op2_expr
";
string _path = "D:\\ASTs"; // путь для создания файлов анализа AST
string _namespace = "Facc.Example.ASTs"; // пространство имён для сгенерированных файлов анализа AST
var _generator = new AstGenerator (_grammar, _path, _namespace);
_generator.ClearPath (); // очистить все файлы в указанном пути
_generator.Generate (null); // создать файл анализа AST

Для выполнения сгенерированного кода AST и анализа грамматики используйте следующий код:

var _ast_parser = new AstParser ();
var _root = _ast_parser.Parse<ASTs.ExprAST> ("3+2*5-4+(123213213");
if (_root != null) {
    Console.WriteLine ();
    _root.PrintTree (0);
} else {
    var _err =_ast_parser.Error;
    Console.WriteLine ();
    Console.WriteLine ($"Error in Line {_err.Line}: {_err.ErrorInfo}");
    Console.WriteLine (_err.LineCode);
    Console.WriteLine ($"{new string (' ', _err.LinePos)}^");
}

Документация

Лицензия

Лицензия на код: MIT
Лицензия на документацию: CC-BY-SA 4.0

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Компилятор-генератор на основе .NET5. Развернуть Свернуть
C# и 2 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/fawdlstty-Facc.git
git@api.gitlife.ru:oschina-mirror/fawdlstty-Facc.git
oschina-mirror
fawdlstty-Facc
fawdlstty-Facc
main