@ 1c- syntax/ codemirror- lang- bsl 语法
代码 6 语言支持软件包 1C:企业(BSL) 财务报告和审定财务报表 一个脚本 俄语和英语关键词语法, 预处理器指令、汇编说明、多行字符串字元, 和嵌入式查询语言(SDBL)在字符串文字中.
现场演示
https://1c-syntax.github.io/codemirror-lang-bsl/ (中文(简体) ) ——两个相接
CodeMiror 6编辑器:一个带有BSL模块样本(程序有注释,
控制流量、 async 函数、 区域), 具有查询函数的函数
字符串正文由嵌入式的SDBL语法突出出. 添加 ?theme=light 改为
用于光线主题的 URL.
API 引用( 来源于 JSDoc with TypeDoc): https://1c-syntax.github.io/codemirror-lang-bsl/api/ (中文(简体) )。 。 。 .
语法在 勒泽,参考文献
页:1 1c-syntax/bsl-parser ANTLR 4号卫星
结构和结构的语法
1c-syntax/vsc-language-1c-bsl
用于符号样式映射的文本Mate语法.
安装
npm install @1c-syntax/codemirror-lang-bsl
使用量
import {EditorView, basicSetup} from "codemirror"
import {bsl} from "@1c-syntax/codemirror-lang-bsl"
new EditorView({
doc: 'Процедура Привет() Экспорт\n Сообщить("Привет, мир!");\nКонецПроцедуры',
extensions: [basicSetup, bsl()],
parent: document.body
})
盖上什么
- 模块层面:可变申报
Перем编号 :Var程序/职能 声明Экспорт,默认参数和Знач编号 :Val编辑 修改АСИНХ - 控制流量 :
Если编号 :ИначеЕсли编号 :Иначе编号 :КонецЕсли, (中文(简体) ),Пока编号 :КонецЦикла, (中文(简体) ),Для … По … Цикл编号 :КонецЦикла, (中文(简体) ),Для Каждого … Из编号 :КонецЦикла, (中文(简体) ),Попытка编号 :Исключение编号 :КонецПопытки - 发言:
Возврат编号 :Продолжить编号 :Прервать编号 :Перейти,标签~Метка:, (中文(简体) ),Ждать作为独立的声明和表达,ВызватьИсключение, (中文(简体) ),Выполнить, (中文(简体) ),ДобавитьОбработчик编号 :УдалитьОбработчик - 表达式:数字字元,字符串字元(单行和多行)
与
|续),日期文字'YYYYMMDDHHMMSS', (中文(简体) ), 布尔Истина编号 :Ложь, (中文(简体) ),Неопределено, (中文(简体) ),Null, (中文(简体) ),Новый,毒性?(…) - 运算符:算术、比较、逻辑(
И编号 :Или编号 :Не(中文(简体) ) - 说明:
&НаКлиенте, (中文(简体) ),&НаСервере, (中文(简体) ),&НаКлиентеНаСервереБезКонтекста,, , , , , , , , 包括注释参数 - 预处理器 :
#Если编号 :#ИначеЕсли编号 :#Иначе编号 :#КонецЕсли, (中文(简体) ),#Область编号 :#КонецОбласти, (中文(简体) ),#Использовать, (中文(简体) ),#native - 评论:
//(单行),///(BSLDEscription doc-committees) (英语:BSLDEscription) - 安全数据库 (BSL查询语言) 嵌入在查询字符串中 —— 说
一个单独的列泽语法,涵盖100+个关键词(声明/操作符 /)
函数 / 类型/ 元数据对象/ 虚拟表格类别) 已挂载
作为覆盖到任何开始的字符串文字
ВЫБРАТЬ编号 :SELECT编号 :УНИЧТОЖИТЬ编号 :DROP。俄语和英语关键词变体都是 认识和风格都一样.
上游参考文献
语法和样式映射来源于以下 1c 语法 项目。 当更新此软件包时, diff 与记录的 捕捉语法在上游变化.
| 项目 | 用于 | 已绑定的 | 标记 |
|---|---|---|---|
1c-syntax/bsl-parser | Lexer/parser结构(BSL + SDBL ANTR4语法) | a30f8169885836226208041fbc41001bd64d710e | v0.34.1 |
1c-syntax/vsc-language-1c-bsl | TextMate 范围参考文献 (1c.tmLanguage.json, (中文(简体) ), 1c-query.tmLanguage.json(中文(简体) ) | 30e6c7994a2ee745c92fa0238fa2e81c78d4781d | v1.33.1 |
1c-syntax/bsl-language-server | 语义-token → LSP 符号类型映射(SemanticTokensProvider, (中文(简体) ), *SemanticTokensSupplier)——被困于活跃分子 develop 分支, 不是最新发布的 | be49fcbf45d082a1db15504b51a551f6a55183c0 (单位:千美元)develop(中文(简体) ) | 最新发布时间 : v0.29.0 |
上游变化后重新同步:
上方表格,重放上游 diff 相对 src/bsl.grammar 财务报告和审定财务报表
src/index.ts (样式Tags),并添加回归测试 test/cases.txt。 。 。 .
限制
少数故意的简化,主要是保留LR语法 无歧义:
- 上下文敏感的预处理器标识符 .
#Если编号 :#Иначе编号 :#КонецЕсли编号 :#Тогда编号 :#И编号 :#Или编号 :#Не重用相应的 BSL 关键字 术语——样式Tags通过父选择者对其进行歧视. 其余部分 预处理器唯一的单词( q)Область, (中文(简体) ),КонецОбласти, (中文(简体) ),Использовать, (中文(简体) ),native, (中文(简体) ),Удаление编号 :КонецУдаления, (中文(简体) ),Вставка编号 :КонецВставки已经 专门化全球; 如果您在外部使用一个普通标识符#上下文,将标记为预处理器符号。 BSL 公约 在实践中不与这些名字相冲突. - 调用参数中的逗号 (单位:千美元)
Метод(a,,b)或者说Метод(,a))为 不支持 – 建模,作为独立项目与内部冲突f(g(...))在 LR(1) 中解析,没有自定义的外部标识器。 全体 参数必须是非空表达式。 感染者约为1%至2% 现实世界 BSL. - 多行字符串不能包含嵌入式预处理器指令.
美国人的
multilineString : STRINGSTART (STRINGPART | BAR | preprocessor)* STRINGTAIL接受#Если内置 a|- 接续字符串; 我们匹配 整个字面作为一个符号。 实践中非常罕见.
对照 ~100 现实世界配置文件验证
(单位:千美元)1c-syntax/bsl-language-server 财务报告和审定财务报表 1c-syntax/vsc-language-1c-bsl
固定装置: 85% 干净, 0 个硬故障,其余的~15%为
故意解析错误测试案例、源级打字,或击中一个
以上三个限制.
超出范围( 推迟到其他工具):
- 智能/ 完成/ 徘徊—— 属于
bsl-language-server。 。 。 . - 复出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相出相相出相出相出相出相出相.
构建测试( T)
npm install
npm run build # runs lezer-generator + rollup + tsc
npm test # mocha against test/cases.txt fixtures
{\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}收押船是公共邮轮 .npmrc 在默认的网络上作贡献
到一个私有镜像(例如公司造型) 仍然从
https://registry.npmjs.org/。需要单独出版 npm login
违反公共登记.
演示
主机版本在 https://1c-syntax.github.io/codemirror-lang-bsl/ (中文(简体) ) 实值
自动部署 .github/workflows/pages.yml 在每次推动
main。要在当地建立演示:
npm install
npm run lint # ESLint (flat config) on src/, examples/, test/
npm run build # main library → dist/
npm test # mocha against test/cases.txt and overlay tests
npm run build:demo # static demo → docs/{index.html,bundle.js}
npm run build:docs # TypeDoc API reference → docs/api/
npm run build:site # demo + docs (CI uses this for gh-pages)
# serve docs/ via any HTTP server, e.g.
python3 -m http.server -d docs 8080
examples/demo.ts 来源; examples/index.html 是 HTML 外壳
滚动配置副本 docs/index.html 和捆绑在一起
bundle.js。 。 。 .
出版发行
通过发布带有表单标签的 GitHub 发布来剪切释放
v<version> (比对) package.json#version) (中文(简体) ). 这个
.github/workflows/publish.yml 工作流程构建、测试和运行
npm publish --provenance --access public 对npmjs.org。 认证
通过 npm 受托出版
- 没有长寿 NPM_TOKEN 需要保密; npm 交换工作流程
OIDC 用于在出版时的短命证书.
设置( 一次性)
- https://www.npmjs.com/package/@1c-syntax/codemirror-lang-bsl/ access (中文(简体) ) → 受托出版商 → 添加
- 提供者 : GitHub 动作
- 仓库拥有者 :
1c-syntax,仓库 :codemirror-lang-bsl - 工作流程文件名称 :
publish.yml - 环境:
npm
就是这样——没有秘密,没有象征. 工作流程的 id-token: write
权限加 --provenance 足够; npm 验证 OIDC 令牌
对已配置的可信任出版商,并接受上传.
切开释放
- 弹出
package.json#version,承诺,推. - https://github.com/1c-syntax/codemirror-lang-bsl/releases/ new (中文(简体) ) →
标签
v<version>(比对)package.json#version页:1 发布。 。 。 . - 这个
Publish to npm工作流程拾取release.published事件, 验证标签 vs 版本、构建、测试和运行npm publish。 。 。 .
切割前干燥
workflow_dispatch 打开 Publish to npm 接受一个 dry_run 输入。 运行它
在不实际发表的情况下验证认证、构建和沥青球内容.
许可证
麻省理工学院——见 自由主义。 。 。 .