KGT铁路图美化算法解析:8个Pretty Pass如何让图形输出更简洁

发布时间:2026/8/27 14:28:03

KGT铁路图美化算法解析:8个Pretty Pass如何让图形输出更简洁
KGT铁路图美化算法解析8个Pretty Pass如何让图形输出更简洁【免费下载链接】kgtBNF wrangling and railroad diagrams项目地址: https://gitcode.com/gh_mirrors/kg/kgtKGTKates Grammar Tool是一款用于 BNF 语法 wrangling 的命令行工具输入各种 BNF 方言WSN、ISO EBNF、ABNF、RBNF 等输出转换后的 BNF 以及美观的铁路图Railroad Diagram。其中铁路图之所以看起来清爽靠的是一组藏在src/rrd/下的美化算法Pretty Pass——本文带你快速看懂这 8 个 Pass 各干了什么。美化在 KGT 流水线中的位置KGT 的转换流程是解析 BNF → 构建语法树 → 转成铁路图节点RRD→ 运行 Pretty Pass → 渲染输出。渲染器SVG、UTF-8 文本等在输出前统一调用一次rrd_pretty()入口函数例如 svg/output.c 与 rrtext/output.c 都是如此。驱动逻辑集中在src/rrd/pretty.c第 63-86 行按固定顺序执行 Pass每个 Pass 反复扫描整棵树直到一次完整扫描没有产生任何改动不动点迭代且单 Pass 最多重试 20 次防止死循环。美化流水线一次运行的完整顺序rrd_pretty()实际排了 13 步棋collapse作为清道夫穿插在其余 8 个 Pass 之间步骤Pass作用一句话1 collapse移除只含 1 个元素的 alt/seq 容器2skippable给带空分支的 alt 打上 skippable 标记3redundant删掉循环外多余的选项框、循环内套循环4 collapse再清一次单元素容器5roll把与循环体首尾相同的节点卷进循环6 collapse清理7nested把嵌套的 alt/seq 压平合并8ci拆出大小写字母对生成a-z样式省略号9 collapse清理10affixes循环前后的重复片段并入循环计数11 collapse清理12bottom把底重顶轻的循环翻过来加跳过分支13 collapse收尾清理逐个拆解8 个 Pretty Pass 各做什么以下源码都在src/rrd/目录每个 Pass 都是对整棵 RRD 树的一次改写函数。1️⃣ collapse删空壳容器文件src/rrd/pretty_collapse.c铁路图里选择框alt和顺序框seq如果只剩 1 个子节点纯属浪费。这个 Pass 把壳剥掉直接换成里面的子节点。它最频繁运行13 步里出现 6 次保证其他 Pass 每次改写后结构立即归整。2️⃣ skippable识别可跳过分支文件src/rrd/pretty_skippable.calt 里出现空分支NULL语义上是什么都不写时说明整个 alt 是可跳过的——Pass 会把NODE_ALT改写为NODE_ALT_SKIPPABLE并顺手删掉 seq / skippable-alt 里无意义的空节点。渲染器借此画出一条干净的跳过直线而不是一截悬空的空框。3️⃣ redundant消灭冗余包装文件src/rrd/pretty_redundant.c处理两类冗余选项框包循环ALT_SKIPPABLE只有两个分支其中一个正好是可选循环带跳过分支的 loop那么这个 alt 是多余的直接换成循环本身循环套循环外层循环体内只有一层内循环且半边为空时剥掉外层只留内层。4️⃣ roll把重复片段卷进循环文件src/rrd/pretty_roll.c源码注释里的 ASCII 示意最直观当循环出口路径上的片段A B C与循环回边上的C B A等价时把其中一个搬进循环的.forward列表让重复部分整体进入循环结构而不是画在循环外面。roll_prefix/roll_suffix分别处理循环前缀和后缀两种形态图面立刻短了一截。5️⃣ nested压平嵌套结构文件src/rrd/pretty_nested.calt 里套 alt、seq 里套 seq在铁路图上就是框中画框、线条绕圈。这个 Pass 把内层列表直接摊平合并进外层列表一层变多层视觉复杂度大幅下降。6️⃣ ci大小写字母对 → 省略号文件src/rrd/pretty_ci.cBNF 里常写26 个小写字母各写一遍的冗长选择列表。这个 Pass 发现 alt 的每个文本分支都是单字符、且大小写各一份时把它们转成成对的大小写敏感字面量后续 tnode 重写阶段就能合并渲染成a-z/A-Z的省略号区间——几十个分支变成一个椭圆。7️⃣ affixes首尾匹配片段并入循环计数文件src/rrd/pretty_affix.c若循环后面紧跟的片段恰好等于一次完整循环体前缀/后缀匹配就删掉这段 affix把循环的 min/max 计数 1。例如至少出现 2 次的X X不再画成循环 → X而是直接把循环记为X两次。8️⃣ bottom翻转底重顶轻的循环文件src/rrd/pretty_bottom.c有些循环顶部为空、底部回边却是一大串复杂结构。直接渲染会让主路径变成一条反着走的线。这个 Pass 把循环上下翻转并外包一个可跳过的 alt用稍宽的图换取内容正序阅读——注释里明确写道图会更宽但避免了反转序列内容。为什么这个顺序不能乱顺序本身就是算法的一部分先skippable标记可跳过性redundant才能安全识别可跳过的选项框roll/affixes改写循环后可能产生新的单元素容器所以后面紧跟collapsebottom放在最后等结构基本定型再决定翻转方向。每步的 20 次不动点迭代上限见src/rrd/pretty.c第 78-84 行的limit 20则保证任何语法都能终止收敛。上手看看效果仓库的examples/目录提供了各方言的示例语法如examples/expr.bnf、examples/expr.iso-ebnf用 KGT 把任一 BNF 转成rrutf8或svg输出美化前后的差别一眼可见。完整文档见 man/kgt.1/kgt.1.xml教程图见doc/tutorial/目录。小结8 个 Pretty Pass 高频清道夫collapse组成一条 13 步的铁路图美化流水线每个 Pass 只负责一种结构简化剥壳、标记、去冗余、卷循环、压平、字母合并、计数并入、翻转不动点迭代 顺序编排是输入任意 BNF输出都能又简洁又稳定的关键全部源码位于src/rrd/pretty_*.c入口src/rrd/pretty.c非常适合逐文件阅读源码。【免费下载链接】kgtBNF wrangling and railroad diagrams项目地址: https://gitcode.com/gh_mirrors/kg/kgt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Svelte Materialify使用指南:Button、Card、Alert、Chip等10个高频组件用法示例

Svelte Materialify使用指南:Button、Card、Alert、Chip等10个高频组件用法示例

2026/8/27 14:28:03

Svelte Materialify使用指南:Button、Card、Alert、Chip等10个高频组件用法示例 【免费下载链接】svelte-materialify A Material UI Design Component library for Svelte heavily inspired by vuetify. 项目地址: https://gitcode.com/gh_mirrors/sv/svelte-mat…

【AI大模型】大白话带你了解:智能体、LLM、RAG和提示词工程,轻松构建下一代应用

【AI大模型】大白话带你了解:智能体、LLM、RAG和提示词工程,轻松构建下一代应用

2026/8/27 14:18:03

前言 今天主要来聊一聊Ai大模型中的几个概念 这两年AI应用开发火得不行,但很多小伙伴被一堆专业名词绕晕了。今天咱们就来掰开揉碎说说几个最关键的术语,保证看完你就能和工程师聊上两句了。 一、AI里的"打工人"——智能体 想象有个24小时待命…

一招教你解决DeepSeek R1的卡顿问题,收藏这一篇就够了!!

一招教你解决DeepSeek R1的卡顿问题,收藏这一篇就够了!!

2026/8/27 14:18:03

前言 整个过年,DeepSeek给我用的都卡炸了。 我自己在官方app和网页里,到现在也还是10条回复有8条是“服务器blabla,请稍后重试”。 每次见到这句话,我都想脑溢血。坦率的讲,你指望DeepSeek官方来给你提供一个非常良好的…

TOPSIS优劣解距离法:多指标决策的量化排序与Python实战

TOPSIS优劣解距离法:多指标决策的量化排序与Python实战

2026/8/27 15:18:06

1. 项目概述:从“选哪个好”到“量化排序”的决策利器在数学建模竞赛、商业分析乃至日常决策中,我们常常面临一个经典难题:面对多个备选方案,每个方案都有一堆评价指标,有的指标越高越好(比如利润、效率&am…

Provision安全清单:ADI数据泄露风险与Apple账号保护的10个关键要点

Provision安全清单:ADI数据泄露风险与Apple账号保护的10个关键要点

2026/8/27 15:18:06

Provision安全清单:ADI数据泄露风险与Apple账号保护的10个关键要点 【免费下载链接】Provision Set of tools interracting with Apple servers. Dont hesitate to leave a star if you appreciate it. 项目地址: https://gitcode.com/gh_mirrors/pr/Provision …

Xlist后台下载指南:如何不间断下载云盘大文件,完整设置详解

Xlist后台下载指南:如何不间断下载云盘大文件,完整设置详解

2026/8/27 15:18:06

Xlist后台下载指南:如何不间断下载云盘大文件,完整设置详解 【免费下载链接】xlist An all-in-one Alist client. / 一款多功能 Alist 客户端。 项目地址: https://gitcode.com/gh_mirrors/xl/xlist Xlist 是一款多功能的 Alist 云盘客户端&#…

高级开发指南:为Blender Launcher V2添加新Blender Fork支持的11个关键步骤

高级开发指南:为Blender Launcher V2添加新Blender Fork支持的11个关键步骤

2026/8/27 15:18:06

高级开发指南:为Blender Launcher V2添加新Blender Fork支持的11个关键步骤 【免费下载链接】Blender-Launcher-V2 Standalone client for managing official builds of Blender 3D and its popular forks 项目地址: https://gitcode.com/gh_mirrors/bl/Blender-L…

HpBandSter还能用吗?官方维护现状与SMAC3/DEHB替代方案选型指南

HpBandSter还能用吗?官方维护现状与SMAC3/DEHB替代方案选型指南

2026/8/27 15:18:05

HpBandSter还能用吗?官方维护现状与SMAC3/DEHB替代方案选型指南 【免费下载链接】HpBandSter a distributed Hyperband implementation on Steroids 项目地址: https://gitcode.com/gh_mirrors/hp/HpBandSter HpBandSter(HyperBand on STERoids&a…

nginMesh分布式追踪实战:OpenTracing+Zipkin让微服务每次请求清晰可见

nginMesh分布式追踪实战:OpenTracing+Zipkin让微服务每次请求清晰可见

2026/8/27 15:08:05

nginMesh分布式追踪实战:OpenTracingZipkin让微服务每次请求清晰可见 【免费下载链接】nginmesh Istio compatible service mesh using NGINX 项目地址: https://gitcode.com/gh_mirrors/ng/nginmesh nginMesh 分布式追踪是这款 Istio 兼容服务网格的核心可观…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

2026/8/27 0:07:12

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

LeetCode Hot100(51-60)算法精解与面试技巧

LeetCode Hot100(51-60)算法精解与面试技巧

2026/8/27 0:07:12

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

CRC校验实战:从模2除法到HJ212协议排错

CRC校验实战:从模2除法到HJ212协议排错

2026/8/27 0:07:12

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…