新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于 ANTLR4 的电话号码语法 telephone:规则解析、示例验证与构建测试实践

发布时间:2026/9/25 3:27:16来源:尧图网络
基于 ANTLR4 的电话号码语法 telephone:规则解析、示例验证与构建测试实践
编程语言编译器开发工具【免费下载链接】grammars-v4Grammars written for ANTLR v4; expectation that the grammars are free of actions.项目地址https://gitcode.com/gh_mirrors/gr/grammars-v4点击查看免费下载本篇文章以 grammars-v4 仓库中的 telephone 语法模块 为对象完整剖析其 telephone.g4 的语法规则结构、词法设计、示例输入与 Maven 构建测试链路帮助读者快速掌握如何用 ANTLR4 编写和验证一个支持北美编号计划NANP与日本电话号码格式的解析器并能在本地通过命令行与 Maven 插件直接运行验证。模块概览一个无 action 的纯描述性语法telephone 是 grammars-v4 仓库中用于解析电话号码的 ANTLR4 语法位于 telephone 目录。整个模块的文件组织非常精简telephone.g4唯一的语法源文件同时包含词法规则与语法规则examples4 个用于验证解析结果的示例输入文件pom.xml基于 Maven 的构建与自动化测试配置desc.xml声明该语法可生成的目标语言targetsREADME.md模块说明明确其定位是 An ANTLR4 grammar for Telephone numbers。与 grammars-v4 仓库的整体约定一致项目描述明确 expectation that the grammars are free of actionstelephone.g4 是全描述性descriptive语法它只描述电话号码的语言结构内部不含任何嵌入到规则中的目标语言 action 或 semantic predicate因此可以干净地为 CSharp、Cpp、Dart、Go、Java、JavaScript、PHP、Python3、TypeScript、Antlr4ng 等多语言目标生成解析器见 desc.xml。语法规则逐层拆解顶层入口与整体结构telephone.g4 从语法声明grammar telephone;开始定义了三个顶层规则test : number EOF ; number : 1? ? variation ; variation : nanp | japan ;test是模块约定俗成的入口规则要求一个完整的number后紧跟EOF即强制要求输入被整体消费不允许多余字符残留适合作为单元测试的入口点number是核心号码规则先处理可选的国际前缀再进入具体编号计划变体可选的1对应北美编号计划的国家码country code随后可选的一个允许输入中出现形如011 ...的写法见下文示例 2、3真正的主体由variation决定——要么是 NANP 格式要么是日本格式。北美编号计划NANP分支// North American Numbering Plan nanp : 011 areacode exchange subscriber ; areacode : DIGIT DIGIT DIGIT ; exchange : DIGIT DIGIT DIGIT ; subscriber : DIGIT DIGIT DIGIT DIGIT ;nanp分支telephone.g4采用011 区号 局号 用户号的固话拨号结构前缀字面量011模拟国际长途拨号前缀北美以外拨往北美常用areacode为 3 位区号如示例中的403exchange为 3 位局号如示例中的867subscriber为 4 位用户号如示例中的5309。三者合起来正好构成北美电话号码典型的NPA-NXX-XXXX即 3-3-4 数字分组。需要指出的是该语法中的区号、局号只是按位数建模并不校验真实号码分配规则例如区号首位不为 0/1 等约束并未在词法层体现。日本编号计划分支// Japan japan : 010 areacode exchange subscriber ; DIGIT : [0-9] ;japan分支telephone.g4与 NANP 结构对称前缀字面量换成010日本国际电话接入码同样复用areacode / exchange / subscriber三段式数字结构。值得注意的是该分支复用 NANP 的位数定义因此日本号码在此语法中被建模为010 3 3 4的等宽分组属于对实际日本号码如示例中的010 64 3 477 4000的简化抽象并不区分日本国内区域码位数的真实差异。从源码结构看variation通过纯文本前缀011vs010即可在语法层区分两种格式无需任何 action 参与决策。词法规则极简的数字与空白处理语法仅定义两个词法 tokentelephone.g4DIGIT : [0-9] ; WS : [ \r\n] - skip ;DIGIT匹配单个0-9字符语法规则中通过连续拼接DIGIT DIGIT DIGIT来表达定长数字这种写法使规则结构一目了然代价是 token 流较细碎一个数字一个 tokenWS匹配空格、回车与换行并通过- skip交给词法分析器丢弃因此示例文件中数字与数字之间的空白可以被任意数量地使用解析器无需感知空白位置。示例输入与解析预期examples 目录提供了 4 个验证文件分别覆盖了 NANP 与日本格式的多种前缀组合文件内容对应规则路径example1.txt011 403 867 5309number → variation → nanp不带1与example2.txt011 403 867 5309number命中可选的后进入nanpexample3.txt1 011 403 867 5309number同时命中可选的1与后进入nanpjapan1.txt010 64 3 477 4000number → variation → japan四个示例恰好穷举了number规则中两个可选前缀1?、?与两个variation分支nanp、japan的主要组合构成一组针对入口规则test的行为验证矩阵只要任何一个示例无法被完整解析到 EOF即说明语法回归或示例文件与语法不匹配。构建与自动化测试pom.xml 双插件链路telephone/pom.xml 以根项目 pom.xml 为父 POMorg.antlr.grammars:grammarsv4:1.0-SNAPSHOT通过两个插件形成生成 测试闭环antlr4-maven-plugin将sourceDirectory指向模块根目录明确只包含telephone.g4并同时开启visitor与listener两种遍历模式的代码生成即mvn generate-sources阶段即可产出对应目标语言的 Lexer/Parser/Listener/Visitor 骨架代码。antlr4test-maven-plugin这是模块的测试引擎关键配置包括grammarNametelephone指明被测语法entryPointtest即从test规则开始解析exampleFilesexamples/指向上述示例目录运行mvn test时插件会逐一读取该目录下的输入文件从test入口开始解析任何一个文件解析失败都会导致测试失败。这条双插件链路意味着克隆仓库后在telephone模块下执行mvn test即可自动完成语法生成 → 4 个示例文件全量解析 → 结果校验的完整回归流程无需手写任何 Java 测试类。本地快速体验antlr4-parse 与 grun 脚本如果不借助 Maven仓库也提供了无需安装 Java 即可运行 ANTLR 的 Python 工具链antlr4-tools见 _scripts/antlr4-tools/README.md。其核心命令antlr4-parse可直接以解释器模式解析语法并输出语法树例如在telephone目录下执行pip install antlr4-tools antlr4-parse telephone.g4 test -tree examples/example1.txt预期输出一棵以test为根、依次包含number → variation → nanp及各区号/局号/用户号子节点的语法树其中011等字面量 token 与DIGITtoken 均会显式出现在树中也可以改用-tokens查看 token 流或用-gui弹出可视化窗口。由于入口规则是test任何不以合法number结尾的输入如多余字符或位数不足都会在EOF处报错。此外仓库提供了跨平台的 ANTLR 测试辅助脚本 _scripts/grun.sh在配置好 ANTLR 环境后同样可以调用grun telephone test配合-tree、-tokens、-gui等参数进行交互式验证。局限与可扩展方向基于对源码的阅读可以谨慎地总结该语法的边界与可能的扩展点纯位数建模区号、局号、用户号均只约束为固定位数telephone.g4不校验号码是否真实有效例如不区分011与010之外的更多国际前缀仅两种编号计划variation目前只支持nanp与japan两个分支如需支持其他国家或移动号段如86、44等可仿照japan分支在variation中扩展新规则并在number中补充对应国家码字面量长度模型的简化日本分支复用了 3-3-4 分组若要精确覆盖日本国内可变长度的区号/局号需要引入更多规则层级而非简单的定长DIGIT拼接。总体而言telephone 是一个结构清晰、无 action、可编译到十余种目标语言的极简 ANTLR4 参考实现非常适合作为学习如何用词法/语法规则表达带可选前缀与分支的领域格式的入门范本其 pom.xml 与 examples 的组合也为快速回归验证提供了现成的工程模板。赞分享编程语言编译器开发工具【免费下载链接】grammars-v4Grammars written for ANTLR v4; expectation that the grammars are free of actions.项目地址https://gitcode.com/gh_mirrors/gr/grammars-v4点击查看免费下载相关推荐Action! 语言 ANTLR4 语法实现解析从语法规则、类型系统到示例验证Action! 语言 ANTLR4 语法实现解析从语法规则、类型系统到示例验证 导读 本文围绕 action/ https://link.gitcode.co编程语言编译器开发工具freeCodeCamp 电话号码校验器项目实战基于 freeCodeCamp 仓库构建 JavaScript 算法认证项目freeCodeCamp 电话号码校验器项目实战基于 freeCodeCamp 仓库构建 JavaScript 算法认证项目 本项目文件位于 curricul前端后端教育FOL 一阶逻辑 ANTLR4 语法语法结构、记号体系与构建测试实战FOL 一阶逻辑 ANTLR4 语法语法结构、记号体系与构建测试实战 本文以 grammars v4 仓库中的 FOLFirst Order Logic一编程语言编译器开发工具上一篇如何永久保存微信聊天记录WeChatMsg完整指南下一篇Minify测试套件完全解析如何确保压缩代码的正确性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

ISO 2859-1抽样标准详解:AQL、检验水平与Python自动化实现 2026/9/25 5:58:16

ISO 2859-1抽样标准详解:AQL、检验水平与Python自动化实现

1. 为什么制造业老手都在用ISO 2859-1做抽样但凡在工厂里干过质量或者SQE的人,都绕不开一个场景:来料一车一车地进,全检根本检不过来,抽检又怕漏掉批量性不良。这时候你手里如果没有一套能说服供应商、又能说服自己老板的抽样方案…

阅读更多 →
Atlas 300V 24G部署YOLOv5实战:从环境搭建到推理调优 2026/9/25 5:58:10

Atlas 300V 24G部署YOLOv5实战:从环境搭建到推理调优

这段时间后台一直有人私信问我:“Atlas 300V 24G 是运算加速卡吗?”“跑 YOLO 用 Atlas 到底行不行?” 正好我手里有一块 Atlas 300V 24G,最近也在它上面完成了 YOLOv5 的完整部署,从环境搭建到模型转换再到推理调优都…

阅读更多 →
treg:规则驱动的终端目录树工具,告别tree命令的忽略尴尬 2026/9/25 5:58:10

treg:规则驱动的终端目录树工具,告别tree命令的忽略尴尬

1. 项目概述:treg 到底是什么,解决什么问题如果你和我一样,日常在 Linux 终端下干活,大概率用过tree命令来查看目录结构。tree在展示层级目录上是把好手,但它有个很尴尬的地方:没有任何内置规则引擎&#x…

阅读更多 →
从STM32到FOC:汽车电子电机控制入门与进阶路线 2026/9/25 5:57:52

从STM32到FOC:汽车电子电机控制入门与进阶路线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
WPS文档没保存就关闭?三种数据恢复方法全解析 2026/9/25 5:57:45

WPS文档没保存就关闭?三种数据恢复方法全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
《电力系统自动化》附录查找全攻略:从官网到作者邮件的实操指南 2026/9/25 5:57:39

《电力系统自动化》附录查找全攻略:从官网到作者邮件的实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉