基于 ANTLR v4 的 YINI 语言文法指南:语法特性、词法实现与示例解析
发布时间:2026/9/25 2:53:08来源:尧图网络
编程语言编译器开发工具【免费下载链接】grammars-v4Grammars written for ANTLR v4; expectation that the grammars are free of actions.项目地址https://gitcode.com/gh_mirrors/gr/grammars-v4点击查看免费下载YINIYet another INI是一种以人类可读性为优先的极简配置格式拥有形式化定义的语言规范与正式文法。本指南以当前仓库中yini/目录下基于官方 YINI 语言规范版本 1.0.0-rc实现的 ANTLR v4 文法为核心完整讲解 YINI 的语法特性、词法/语法规则设计、类型系统并结合仓库内的大量.yini示例说明其实际使用方式。读完本文你将能够读懂 YINI 配置文件的全部语法要素理解这套文法在词法与语法层面的实现思路并能在自己的项目中复用或集成这套 ANTLR 文法。YINI 设计理念与语言定位YINIYet another INI是一种极简且人类可读的配置文件格式与 INI、JSON、Python 和 Markdown 的思想均有渊源但定位更明确比经典 INI 更有表现力比 JSON 更少噪音比 YAML 更少歧义比 TOML 更简洁。官方定位的核心主张可以概括为结构与简单并存比 INI 更具表达力比 JSON / YAML / TOML 更少冗余极简语法、最大化可读性追求清晰而非炫技机器可解析配有正式文法可被程序稳定地解析与校验。在 yini/README.md 中YINI 的目标被描述为在人类友好的简洁性与可靠的结构之间取得平衡点本仓库提供的正是支撑这一目标的 ANTLR v4 文法实现。核心特性一览✅ 干净、极简的语法避免视觉噪音易于编写和阅读✅ 类型支持字符串String、数字Number、布尔Boolean、列表/数组List/Array、空值Null✅ Markdown 风格的层级化 section 嵌套^、^^、^^^…✅ 结构不依赖缩进——没有缩进陷阱✅ 灵活的注释风格C 风格//与/* ... */同时支持#与;注释✅ 灵活的字面量布尔值支持true、false、on、off、yes、no全部不区分大小写数字支持多种进制与指数记法。仓库中的 yini/desc.xml 声明该文法面向CSharp; Cpp; Dart; Go; Java; JavaScript; PHP; Python3; TypeScript; Antlr4ng等多种目标语言入口规则为yini并用src/main/examples/*.yini作为测试输入。仓库中的 YINI 文法组成与文件结构在仓库中YINI 的 ANTLR v4 实现由以下核心文件构成文件作用yini/YiniLexer.g4词法文法负责将 YINI 文本切分为 tokenyini/YiniParser.g4语法文法定义yini入口规则及各语法结构yini/README.md语言与文法说明yini/pom.xmlMaven 构建配置声明 ANTLR 插件与测试入口yini/desc.xml文法描述元数据版本、目标语言、示例输入yini/src/main/examples/*.yini大量真实 YINI 示例文件同时充当测试用例yini/src/main/java/org/yini/App.javaJava 侧演示入口yini/src/test/java/org/yini/AppTest.java测试类语法文法的入口规则定义如下yini/YiniParser.g4yini: SHEBANG? INLINE_COMMENT* NL* YINI_MARKER? INLINE_COMMENT* NL* section NL* terminal_line? EOF;即一个 YINI 文档可以包含可选的 Shebang 行、可选的yini标记、一个或多个 section以及可选的/END终止行。快速上手一个最小 YINI 文档仓库中的 Simple-explained.yini 展示了最基础的文档形态/* Example of a simple YINI document. */ // Below line is a section header. ^ conf // The following is a member (of above section) with key as called name, whose value is name My Program Name. name My Program Name解读/* ... */是多行注释词法中被 skip^ conf是一个 section 头^为 Markdown 风格的层级标记name My Program Name是该 section 下的成员键值对键为name值为双引号字符串。解析一个简单文档的语法路径从语法文法看^ conf会被词法规则SECTION_HEADyini/YiniLexer.g4匹配为单个 token而后name ...匹配member规则中的KEY WS? EQ WS? value? NL分支yini/YiniParser.g4。注意value?是可选的——当值缺失时如name 且无值解析器将把空值视作 NULL。SectionMarkdown 风格的层级嵌套YINI 的 section 是结构化配置的骨架。层级通过重复标记表示并支持多种标记形式与数值简写。标记类型与层级规则词法规则SECTION_HEAD支持四种 section 标记yini/YiniLexer.g4标记含义^经典插入符caret如^、^^、^^^替代标记less-than如、、§Section 符号U00A7€欧元符号U20AC规则要点重复标记SECTION_MARKER_BASIC_REPEAT允许同一标记重复多次最多 6 层超过 6 层的合法性由 parser 校验并给出更友好的报错数字简写SECTION_MARKER_SHORTHAND允许单个标记后跟正整数如^7、12、§100、€42用于表示 6 层以上的层级非法标记捕获SECTION_MARKER_INVALID用于捕获混合标记与数字等错误形式并将其转发给 parser 以产生精确的错误信息。嵌套示例仓库中的 Nested-Sections.yini 展示了三级嵌套^ DatabaseConfig Host db.example.com Port 3306 User root Password secret ^^ Logging LogFilePath /var/log/db.log LogLevel info EnableRotation YES MaxLogSize 1e6 // 1 MB ^^^ RotationSettings MaxLogCount 5 RotationInterval daily值得注意结构不依赖缩进——^^ Logging前面的缩进仅是排版语法上由^^标记的重复次数决定层级MaxLogSize 1e6演示了带指数的数字字面量EnableRotation YES演示了布尔字面量的替代写法// 1 MB是行内注释。使用反引号引用含空格的标识符当 section 名或键名包含空格与特殊字符时可用反引号包裹。示例见 only-in-strict-mode/Feature-Toggles-with-Alternative-Syntax.yini Feature Toggles Debug ON Experimental UI OFF Night Mode OFF Use Cache ON Cache Config Cache Expiry 86400 // In seconds Last Purge Date (YYYY-MM-DD) 2025-05-25 /END这里同时演示了替代标记、的嵌套、反引号键名允许空格、连字符与括号、以及文档终止符/END。值类型字符串、数字、布尔、列表与对象value规则yini/YiniParser.g4聚合了 YINI 的五大值类型value: null_literal | string_literal | number_literal | boolean_literal | list_in_brackets | object_literal;字符串与转义序列词法上字符串由STRING规则支持yini/YiniLexer.g4分为普通字符串与三引号多行字符串单引号/双引号字符串可用C/R前缀标记如C...、R...H前缀的超字符串hyper stringyini/YiniLexer.g4转义序列ESC_SEQ\、\以及\\0?abfnrtv、Unicode\uXXXX16 位与\UXXXXXXXX32 位字符串支持拼接语法规则string_concat: NL* PLUS NL* STRING。Escape-Codes-Example.yini 演示了完整的转义用法escape_examples1 CThis string contains: \\, \, \, \?, \a, \b, \f, \n, \r, \t, \v escape_examples2 CThis string contains: \\, \, \, \?, \a, \b, \f, \n, \r, \t, \v三引号多行字符串Triple-Quoted-Strings.yini 展示了...多行字符串内部允许包含双引号也可配合C前缀启用转义^ Triple-Quoted String Examples test1 This is a multiline string that spans three lines. test2 He said, hello and left. test4 C\t He said, \t hello and left. 数字字面量多种进制与指数词法规则NUMBERyini/YiniLexer.g4支持丰富记法十进制0、正整数不允许前导零如01、小数1.5、指数1e6、3e8、1e-6二进制0b1010或%1010八进制0o777避免与布尔ON/OFF冲突双进制0z前缀digit 加x10、e11十六进制0xFF或#FF。only-in-strict-mode/Advanced.yini 演示了指数记法^ AdvancedSettings MaxThreads 16 Timeout 30 IsEnabled YES UseSSL NO IsAdmin true ^ Complex Number Literals Epsilon 1e-6 LargeNumber 3e8 /END布尔值六种写法全部不区分大小写词法将布尔值分为两组yini/YiniLexer.g4均启用caseInsensitive真true、on、yes假false、off、noBooleans.yini 覆盖了全部六种形态^ title bool1 FALSE bool2 TRUE question1 NO question2 YES switch1 OFF switch2 ON列表方括号写法与无括号写法YINI 支持两种列表写法方括号列表list_in_brackets[ Orange, Banana ]元素可以是值或嵌套列表无括号列表member_colon_listyini/YiniParser.g4使用冒号:而非等号如list1: Orange, Banana。Lists.yini 完整演示了两种写法与嵌套列表^ Lists ^^ ListWithBrackets list1 [ Orange, Banana, Pear, Peach ] list2 [] // Empty list. // Note: var1 and var2 are not lists, both values will be null. var1 null var2 listOfLists [ [stylesheet, https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css], [stylesheet, css/general.css] ] ^^ ListWithoutBrackets // Alternative notation for a list without brackets, // note the colon : instead of the equals character . list1: Orange, Banana, Pear, Peach list2: null list3: listOfLists: [stylesheet, https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css], [stylesheet, css/general.css]示例注释还特意指出var1 null与var2 无值都不是列表两者值均为 null。空值与对象null_literalNULL不区分大小写同时键值对缺省值也被解析为 nullyini/YiniParser.g4object_literal{ key: value, ... }花括号对象语法yini/YiniParser.g4也支持空对象{}。Null-and-Missing-Values.yini 演示了显式 null 与缺省值^ SettingsWithNulls AppMode NULL Language Timeout 30 MaxConnections 100注释体系与文档级要素YINI 的注释体系非常灵活全部在词法层被skip丢弃yini/YiniLexer.g4注释类型语法说明块注释/* ... */多行行注释;或--开头整行行内注释//或#后随空白行尾注释文档级要素还包括Shebang#! ...词法规则SHEBANG可位于文档开头YINI 标记yini大小写不敏感用于声明文档为 YINI 格式如 WebApp.yini 开头即使用Yini文档终止符/END大小写不敏感通过terminal_line规则支持yini/YiniParser.g4示例见上述Advanced.yini与Feature-Toggles-with-Alternative-Syntax.yini。下面是一个综合示例 WebApp.yiniYini app name TaskTracker version 1.3.2 debug false environment production server host 0.0.0.0 port 8080 use_https true database engine postgresql host db.internal port 5432 user taskadmin password s3cr3t name tasktracker messages welcome Welcome to TaskTracker! Your productivity companion. error Something went wrong. Please try again.词法与语法实现要点宽容匹配与错误报告这是一套以贴近官方规范、兼顾易用与友好报错为目标的文法。几个值得关注的实现细节大小写敏感性的精细控制词法端对YINI_MARKER、TERMINAL_TOKEN、BOOLEAN_*、NULL都启用了caseInsensitive trueyini/YiniLexer.g4与规范中这些字面量不区分大小写的要求一致语法端则显式声明caseInsensitive falseyini/YiniParser.g4保证键名、标识符等按原文精确匹配。宽容规则与已知限制README 明确声明了本套文法的已知限制yini/README.md虽然它基于官方规范但部分规则允许更宽泛的 token 集合更宽松的规则目的是让实现了该文法的解析器能够更有效地捕获并报告错误。典型体现REST规则yini/YiniLexer.g4与bad_member规则yini/YiniParser.g4专门用于兜底捕获非法成员语法SECTION_MARKER_INVALID负责把非法 section 标记转交给 parser 产生精确报错字符串与标识符中的非法字符同样推迟到 parser 阶段处理词法注释明确说明以提供更精准的错误定位。词法顺序的工程性安排NUMBER必须排在KEY、IDENT之前yini/YiniLexer.g4 注释明确指出否则数字会被错误识别为标识符OCT_INTEGER的设计特意避开与布尔字面量ON/OFF的冲突层数上限≤ 6的校验被推迟到 parser从而可以对超限层级给出更友好的用户反馈。构建、测试与集成仓库通过 Maven 管理该文法的构建与测试yini/pom.xmlantlr4-maven-plugin负责从YiniLexer.g4与YiniParser.g4生成目标语言代码同时开启 visitor 与 listenerantlr4test-maven-plugin以yini为入口规则、src/main/examples/下的.yini文件为测试输入自动验证示例文件均可被正确解析yini/desc.xml 声明文法版本^4.10与多语言目标支持。这意味着任何向yini/src/main/examples/目录新增的.yini示例都会自动进入测试集仓库以示例即测试的方式持续守护文法质量。在自定义项目中集成这套文法时只需将YiniLexer.g4与YiniParser.g4作为 ANTLR 输入生成对应目标语言的词法/语法分析器然后从入口规则yini开始解析即可。总结YINI 在配置格式光谱中选择了结构简单 表达力的平衡点Markdown 风格的 section 层级、六种大小写不敏感的布尔写法、多进制数字、灵活的注释体系、三引号字符串与反引号标识符共同构成一套对人类友好、对机器可解析的格式。而本仓库中的 YiniLexer.g4 与 YiniParser.g4 忠实复现了官方规范版本 1.0.0-rcyini/README.md并刻意采用宽容词法配合 parser 兜底策略在保证语法正确之外进一步提升了错误报告的可用性——这正是机器友好的深层体现。配合yini/src/main/examples/下覆盖各语法特性的示例文件这套文法既是语言规范的落地实现也是一份可直接学习的参考教科书。赞分享编程语言编译器开发工具【免费下载链接】grammars-v4Grammars written for ANTLR v4; expectation that the grammars are free of actions.项目地址https://gitcode.com/gh_mirrors/gr/grammars-v4点击查看免费下载相关推荐CodeQL 语法文件解析基于 ANTLR v4 的 CodeQL 语言词法/语法实现指南CodeQL 语法文件解析基于 ANTLR v4 的 CodeQL 语言词法/语法实现指南 本指南以 grammars v4 仓库中 codeql/READM编程语言编译器开发工具grammars-v4 仓库 PHP ANTLR v4 语法解析器基于 Phalanger 的多模式岛语法实现指南grammars v4 仓库 PHP ANTLR v4 语法解析器基于 Phalanger 的多模式岛语法实现指南 导读 本文基于 grammars v4 仓编程语言编译器开发工具MDX 查询语言 ANTLR v4 文法解析从 SELECT 语句到词法规则的完整指南MDX 查询语言 ANTLR v4 文法解析从 SELECT 语句到词法规则的完整指南 导读 本文围绕 grammars v4 仓库中的 MDXMultiD编程语言编译器开发工具上一篇使用 LM Evaluation Harness 评估 WMDP 基准生物/网络/化学安全多选题任务的配置、分组与底层实现解析下一篇终极Blueprint组件指南掌握按钮、表单与布局的React UI最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网