Facc — это инструмент языка с собственным синтаксисом, который позволяет описывать грамматику с помощью минималистичной грамматики и автоматически генерировать код AST.
Особенности:
Изучение принципов компиляции всегда было сложным процессом, хотя в интернете можно найти множество руководств и документов по этой теме. Этот репозиторий предлагает альтернативный подход к изучению принципов компиляции с более простой точки зрения и предоставляет подробные руководства, чтобы помочь пользователям самостоятельно создать компилятор.
Сначала установите 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 )