tree-sitter-bsl
v0.1.7
Published
1C (BSL) grammar for tree-sitter
Maintainers
Readme
tree-sitter-bsl
Грамматика 1C BSL в формате tree-sitter.
Пакет также содержит отдельную грамматику sdbl для языка запросов 1C.

Что входит
bsl: грамматика исходных файлов BSL (.bsl,.osl).sdbl: грамматика самостоятельных текстов запросов 1C (.sdbl).- Query-файлы tree-sitter для подсветки BSL/SDBL и внедрения статических
строковых литералов BSL, начинающихся с
ВЫБРАТЬ,SELECT,УНИЧТОЖИТЬилиDROP, какsdbl. - Локальное dev-расширение Zed в
editors/zed-bslдля проверки подсветки BSL, самостоятельного SDBL и внедренного SDBL.
BSL и SDBL остаются разными контрактами парсера. Грамматика BSL не встраивает SDBL в AST строковых литералов; разбор встроенных запросов выполняется через tree-sitter injections и композицию на стороне редактора.
Локальная разработка
Локальный tree-sitter playground запускается отдельно для каждой грамматики:
npm start
npm run start:bsl
npm run start:sdblnpm start является псевдонимом для BSL playground. npm run start:sdbl
запускает playground самостоятельной грамматики SDBL. При необходимости можно
собрать оба WASM-парсера:
npm run build:wasmБыстрая проверка дерева разбора:
npm run parse:bsl -- examples/playground/basic.bsl
npm run parse:sdbl -- examples/playground/select.sdblНебольшие примеры для playground лежат в
examples/playground:
basic.bslдля синтаксиса исходных файлов BSL;select.sdblиquery-package.sdblдля синтаксиса самостоятельных SDBL-запросов.
SDBL-примеры разбираются самостоятельной грамматикой SDBL. BSL-строки с текстом запроса остаются узлами строк BSL; разбор встроенного запроса относится к отдельному контракту injection/composition.
Основные команды проверки:
npm run test:corpus
npm test
npm run test:allnpm run test:corpus использует локальный для пакета tree-sitter-cli и
проверяет оба набора corpus-тестов. Для системного tree-sitter CLI, который
поддерживает -p, эквивалентные команды:
tree-sitter test -p grammars/bsl
tree-sitter test -p grammars/sdblИспользование
Rust
Добавьте зависимость в Cargo.toml:
[dependencies]
tree-sitter = "0.25"
tree-sitter-bsl = "0.1"use tree_sitter::Parser;
fn main() {
let mut parser = Parser::new();
parser
.set_language(&tree_sitter_bsl::LANGUAGE.into())
.expect("Error loading BSL grammar");
let source = r#"
Процедура Привет()
Сообщить("Привет, мир!");
КонецПроцедуры
"#;
let tree = parser.parse(source, None).unwrap();
println!("{}", tree.root_node().to_sexp());
}Node.js
Установите пакет:
npm install tree-sitter-bsl tree-sitterconst Parser = require("tree-sitter");
const BSL = require("tree-sitter-bsl");
const parser = new Parser();
parser.setLanguage(BSL);
const sourceCode = `
Процедура Привет()
Сообщить("Привет, мир!");
КонецПроцедуры
`;
const tree = parser.parse(sourceCode);
console.log(tree.rootNode.toString());Python
Установите пакет:
pip install tree-sitter-bsl tree-sitterimport tree_sitter_bsl as tsbsl
from tree_sitter import Language, Parser
BSL_LANGUAGE = Language(tsbsl.language())
parser = Parser(BSL_LANGUAGE)
source = """
Процедура Привет()
Сообщить("Привет, мир!");
КонецПроцедуры
""".encode()
tree = parser.parse(source)
print(tree.root_node.sexp())Грамматика запросов SDBL
Пакет также экспортирует самостоятельную грамматику языка запросов SDBL:
- Node.js:
require("tree-sitter-bsl").sdbl; - Rust:
tree_sitter_bsl::SDBL_LANGUAGE; - Python:
tree_sitter_bsl.SDBLLanguage()или низкоуровневая капсулаtree_sitter_bsl.sdbl_language(); - Go:
tree_sitter_bsl.SDBLLanguage(); - C:
tree_sitter_sdbl()изtree-sitter-bsl.hи той же библиотеки.
Существующие точки входа BSL остаются языком пакета по умолчанию.
Пакет включает query-файлы tree-sitter для интеграций с редакторами:
grammars/bsl/queries/highlights.scmдля подсветки BSL;grammars/bsl/queries/injections.scmдля внедрения статических строковых литералов BSL, начинающихся с ключевых слов SDBL-выражений, какsdbl;grammars/sdbl/queries/highlights.scmдля подсветки самостоятельного SDBL и текста запросов, внедренного из BSL.
Для Zed используется локальное dev extension:
editors/zed-bsl. Оно регистрирует BSL, SDBL и
специальную для Zed грамматику-носитель sdbl_embedded, чтобы исходный текст
внедренной BSL-строки подсвечивался без изменения контракта самостоятельной
грамматики .sdbl.
Ссылки
- Грамматика основана на правилах BSL Parser
- Архитектурные решения:
docs/decisions - Активный список parser-задач:
spec/IMPLEMENTATION_TODO.md - Контракт грамматики SDBL:
spec/sdbl-query-language.md
