ANTLR 4 版本发布全流程指南:从 git 分支管理到多语言运行时部署

发布时间:2026/9/20 21:46:51

ANTLR 4 版本发布全流程指南:从 git 分支管理到多语言运行时部署 ANTLR 4 版本发布全流程指南从 git 分支管理到多语言运行时部署【免费下载链接】antlr4ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.项目地址: https://gitcode.com/gh_mirrors/an/antlr4导读本文是面向 ANTLR 4 维护者与贡献者的完整版本发布操作手册以仓库 doc/releasing-antlr.md 为骨架结合仓库内的发布脚本scripts/update_antlr_version.py、scripts/deploy_to_website.py与各运行时模块的版本管理实现系统梳理从合并 dev 分支、递增版本号、构建 XPath 解析器、Maven 快照与正式发布到 JavaScript / C# / Python / C / Dart 多目标运行时分发再到官网 Javadoc 与 jar 更新的完整闭环。读完本文你可以掌握 ANTLR 4 每次发版如 4.13.1 → 4.13.2涉及的每一处手工与自动化步骤并理解其背后的版本一致性约束与发布约定。1. 发版前的 Git 分支操作1.1 将 dev 合并进 masterANTLR 4 采用master与dev双分支开发模型日常功能开发与修复落在dev正式发版则基于master。发版的第一步是确保master包含全部待发布代码可以在本地直接合并cd ~/antlr/code/antlr4 git checkout master git merge dev也可以走 Pull Request 流程完成同样的合并。发版结束后见文末获取新鲜 dev 分支一节dev需要重新与master同步保证下一个开发周期的起点与已发布版本一致。1.2 启用 DCO 强制校验自 4.10.1 起ANTLR 4 采用 Linux 内核风格的DCODeveloper Certificate of Origin取代此前需要签署文件的贡献者许可协议CLA。新机制下贡献者在提交与 Pull Request 关联的每个 commit 时必须附加-s参数即git commit -s由 GitHub App 的 DCO 应用自动校验。发版前务必确认antlr4仓库已开启该功能未签 DCO 的提交将无法通过 Pull Request 检查。仓库根目录的 developer-cert-of-origin.txt 记录了 DCO 的原始文本historical-contributors-agreement.txt 则是历史 CLA 存档。1.3 删除可能存在的旧版本 tagMaven Release 插件在发布时会自动为仓库创建版本 tag若同名 tag 已存在会直接报错失败。因此发版前需要清理旧 tag以下以 4.13.2 为例git tag -d 4.13.2 git push origin :refs/tags/4.13.2 git push upstream :refs/tags/4.13.2其中origin与upstream分别对应 fork 与官方仓库远端需要两个远端都删除干净。1.4 Go runtime 的 release tag历史说明Go 模块要求发布 tag 带v前缀。文档中记录了早期做法为 Go runtime 子模块单独打一个带v的 taggit tag -a runtime/Go/antlr/v4/v4.13.2 -m Go runtime module only git push upstream runtime/Go/antlr/v4/v4.13.2 git push origin runtime/Go/antlr/v4/v4.13.2不过该小节在文档中已注明此步骤可能不再必要——Go runtime 已迁移到独立的 runtime/Go 目录对应的独立发布仓库维护v4.13.2这类带v的 tag 由 Go 侧仓库自行管理ANTLR 主仓库不再需要双 tag。2. 递增版本号代码与各配置文件ANTLR 4 的版本号散落在多个运行时与构建文件中发版时需要同步更新。仓库为此提供了半自动脚本 scripts/update_antlr_version.py用法为传入新旧两个版本号python scripts/update_antlr_version.py 4.13.1 4.13.2脚本运行过程会依次打印Updating ANTLR version from 4.13.1 to 4.13.2询问是否执行mvn clean并清理各运行时构建目录C# 的bin/obj、C 的build、JavaScript 的dist等读取 scripts/files-to-update.txt 中列出的文件清单逐个做字符串替换对替换结果打印两类告警{旧版本} not in {文件}该文件未含旧版本号或{旧版本} appears on N lines so _not_ updating {文件}同一文件中旧版本出现多次、脚本出于安全跳过。2.1 版本号文件清单files-to-update.txt采用每行一个文件的格式行首带*表示该文件允许多处替换。当前清单覆盖以下关键位置模块文件仓库相对路径Dockerdocker/DockerfileARG ANTLR_VERSIONGoruntime/Go/antlr/v4/recognizer.go、runtime/Go/antlr/v4/antlrdoc.goPython3runtime/Python3/pyproject.toml、runtime/Python3/src/antlr4/Recognizer.pyDartruntime/Dart/pubspec.yaml、runtime/Dart/lib/src/runtime_meta_data.dartJavaruntime/Java/src/org/antlr/v4/runtime/RuntimeMetaData.javaCruntime/Cpp/VERSION、runtime/Cpp/runtime/src/Version.h、runtime/Cpp/CPackConfig.cmake 及 runtime/Cpp/cmake 下多个 cmake 文件、runtime/Cpp/demo/generate.cmdSwiftruntime/Swift/Sources/Antlr4/RuntimeMetaData.swiftC#runtime/CSharp/src/Antlr4.csproj、runtime/CSharp/src/Properties/AssemblyInfo.cs、runtime/CSharp/src/README.mdJavaScriptruntime/JavaScript/package.json、runtime/JavaScript/package-lock.json、runtime/JavaScript/src/antlr4/Recognizer.js测试辅助runtime-testsuite/resources/org/antlr/v4/test/runtime/helpers/package_ts.json文档doc/getting-started.md、doc/go-target.md、doc/swift-target.md*开头允许多处替换脚本结尾还会打印两条需要人工处理的提示runtime/Cpp/runtime/src/Version.h采用非标准版本机制需要手动编辑。从源码可见其不是简单字符串而是拆分为ANTLRCPP_VERSION_MAJOR/ANTLRCPP_VERSION_MINOR/ANTLRCPP_VERSION_PATCH三个宏并通过ANTLRCPP_MAKE_VERSION合成数值版本号与字符串版本号见 runtime/Cpp/runtime/src/Version.h部分目标无法接受4.x这种两位版本号必须写成4.x.0包括runtime/Dart/pubspec.yaml与runtime/JavaScript/package.json因为 Dart pub 与 npm 对 semver 的解析要求三位段。2.2 Java runtime 版本常量的特殊要求Java 运行时的版本常量位于 runtime/Java/src/org/antlr/v4/runtime/RuntimeMetaData.java当前为public static final String VERSION 4.13.2;发版时该文件绝不能残留-SNAPSHOT后缀。其背后有明确的运行时语义RuntimeMetaData的 javadoc 说明4.3 起代码生成器会在每个生成的 lexer/parser 中硬编码生成工具版本常量并引用运行时的VERSION编译期常量checkVersion(String generatingToolVersion, String compileTimeVersion)在生成代码初始化时被调用用于检测两类版本不匹配生成代码所用 Tool 版本与当前运行时版本不一致编译所引用运行时版本与当前执行运行时版本不一致。检测逻辑并非要求完全相等而是采用getMajorMinorVersion提取x.y主次版本号进行比较见 RuntimeMetaData.java只要主次版本一致例如4.13与4.13.1就认为兼容、不告警不一致则向 stderr 输出警告。因此发版时若 RuntimeMetaData 中的版本带有-SNAPSHOT会污染所有依赖它做版本对齐的生成代码。2.3 全仓库残留版本扫描版本号替换完成后建议再做一次全量扫描确认没有遗漏的旧版本引用。官方推荐做法是先mvn clean再配合find/grep过滤掉构建产物与无关文件mvn clean find . -type f -exec grep -l 4\.12\.0 {} \; | grep -v -E \.o|\.a|\.jar|\.dylib|node_modules/|\.class|tests/|CHANGELOG|\.zip|\.gz|.iml|\.svg排除项覆盖二进制产物.o/.a/.jar/.dylib/.class/.zip/.gz、第三方依赖node_modules/、测试代码tests/与 IDE/辅助文件.iml、.svg。也可以直接用上面提到的python scripts/update_antlr_version.py 旧 新重跑一遍观察脚本输出的not in告警来确认清理干净。确认无误后提交并推送代码。2.4 PHP runtime 的独立更新PHP runtime 维护在独立的仓库中本仓库只需拷贝一份用于跑单元测试因此其版本号RuntimeMetaData.php需要在独立仓库手动递增并发布cd ~/antlr/code/antlr-php-runtime/src git checkout dev # 默认开发分支 git pull origin dev # ... 编辑 RuntimeMetaData.php 将版本号改为 4.13.2 ... git commit -a -m Update PHP Runtime to latest version git push origin dev git checkout master git pull origin master git merge dev git push origin master流程同样是dev 分支改版本 → 合入 master → 推送与主仓库的分支模型保持一致。3. 构建 XPath 解析器绕开循环依赖ANTLR 4 的 XPath 支持runtime/Java/src/org/antlr/v4/runtime/tree/xpath下的XPathLexer.g4、XPath.g4等存在一个经典的循环依赖问题issue #3600生成新版本 XPath 解析器需要用到新版本工具而新版本工具自身的构建又依赖 XPath 解析器。Java 目标的解法是手工构建XPath.java避免用 4.13.2 生成 4.13.2 的解析器。对于 C、C#、Python3 目标则需要在发布时用新版本工具4.13.2-SNAPSHOT重新生成对应的 XPath 词法/语法文件cd runtime/Cpp/runtime/src/tree/xpath java -cp :/Users/parrt/.m2/repository/org/antlr/antlr4/4.13.2-SNAPSHOT/antlr4-4.13.2-SNAPSHOT-complete.jar:$CLASSPATH org.antlr.v4.Tool -DlanguageCpp XPathLexer.g4 cd runtime/CSharp/src/Tree/Xpath java -cp :/Users/parrt/.m2/repository/org/antlr/antlr4/4.13.2-SNAPSHOT/antlr4-4.13.2-SNAPSHOT-complete.jar:$CLASSPATH org.antlr.v4.Tool -DlanguageCSharp XPathLexer.g4 cd runtime/Python3/tests/expr java -cp :/Users/parrt/.m2/repository/org/antlr/antlr4/4.13.2-SNAPSHOT/antlr4-4.13.2-SNAPSHOT-complete.jar:$CLASSPATH org.antlr.v4.Tool -DlanguagePython3 Expr.g4 cd runtime/Python3/src/antlr4/xpath java -cp :/Users/parrt/.m2/repository/org/antlr/antlr4/4.13.2-SNAPSHOT/antlr4-4.13.2-SNAPSHOT-complete.jar:$CLASSPATH org.antlr.v4.Tool -DlanguagePython3 XPathLexer.g4-Dlanguage分别指定 Cpp / CSharp / Python3 目标-cp指向本地 Maven 仓库中新版本工具的 complete jarantlr4-4.13.2-SNAPSHOT-complete.jar。生成的 XPath 文件属于生成产物scripts/files-to-update.txt 末尾专门以注释形式登记了XPathLexer.py、XPathLexer.cpp/.h、XPathLexer.cs等生成文件提醒维护者它们由工具生成、不应手工改版本号。文档同时说明patch 版本如 4.13.2 → 4.13.3通常无需重跑此步骤只有改动 ATN 序列化格式的大版本才需要重新生成 XPath 解析器。4. Maven 仓库发布4.1 配置 ~/.m2/settings.xmlMaven 发布需要与 Sonatype 暂存staging服务器通信并在正式发布时用 GPG 对构件签名。先在~/.m2/settings.xml中配置 staging 服务器账号与签名密钥模板如下文件权限必须收紧为仅本人可读写?xml version1.0 encodingUTF-8? !-- User-specific configuration for maven. Includes things that should not be distributed with the pom.xml file, such as developer identity, along with local settings, like proxy information. -- settings servers server idsonatype-nexus-staging/id usernamesonatype-username/username passwordXXX/password /server server idsonatype-nexus-snapshots/id usernamesonatype-username/username passwordXXX/password /server /servers profiles profile activation activeByDefaultfalse/activeByDefault /activation properties gpg.keynameUUU/gpg.keyname gpg.passphraseXXX/gpg.passphrase /properties /profile /profiles /settings要点sonatype-nexus-staging与sonatype-nexus-snapshots两个 server id 分别对应正式发布与快照发布的 Nexus 远端id必须与根 pom.xml 中distributionManagement配置的 repository id 一致GPG 密钥名与口令放在profile的properties中gpg.keyname、gpg.passphrase且该 profile 默认不激活在 Unix 上务必执行chmod 600 ~/.m2/settings.xml之类收紧权限文档示例为-rw-------因为文件内含密码与私钥口令。4.2 部署 SNAPSHOT 到暂存服务器快照版本如4.13.2-SNAPSHOT的目标是推送到 Sonatype 的 snapshots 仓库。两步走mvn install -DskipTests # 让 jar 对 maven 可见 mvn deploy -DskipTestsdeploy阶段会按 reactor 顺序逐个模块上传 jar 与 pom根 pom.xml 定义了 ANTLR 4 的 reactor 模块清单runtime/JavaRuntime、toolTool、antlr4-maven-pluginMaven 插件、tool-testsuite工具测试、runtime-testsuite运行时测试。文档中的示例构建输出展示了完整的 reactor 摘要[INFO] ANTLR 4 ............................................ SUCCESS [ 4.073 s] [INFO] ANTLR 4 Runtime .................................... SUCCESS [ 13.828 s] [INFO] ANTLR 4 Tool ....................................... SUCCESS [ 14.032 s] [INFO] ANTLR 4 Maven plugin ............................... SUCCESS [ 6.547 s] [INFO] ANTLR 4 Runtime Test Annotations ................... SUCCESS [ 2.519 s] [INFO] ANTLR 4 Runtime Test Processors .................... SUCCESS [ 2.385 s] [INFO] ANTLR 4 Runtime Tests (4th generation) ............. SUCCESS [ 15.276 s] [INFO] ANTLR 4 Tool Tests ................................. SUCCESS [ 2.233 s] [INFO] BUILD SUCCESS4.3 正式发布release:prepare 与 release:perform正式发布走 Maven Release 插件分两步mvn deploy -DskipTests mvn release:prepare -Darguments-DskipTestsrelease:prepare会交互式询问每个模块的发布版本号、SCM tag 名与下一个开发版本号。以 4.13.2 为例典型会话如下What is the release version for ANTLR 4? (org.antlr:antlr4-master) 4.13.2: : 4.13.2 What is the release version for ANTLR 4 Runtime? (org.antlr:antlr4-runtime) 4.13.2: : What is the release version for ANTLR 4 Tool? (org.antlr:antlr4) 4.13.2: : What is the release version for ANTLR 4 Maven plugin? (org.antlr:antlr4-maven-plugin) 4.13.2: : What is the release version for ANTLR 4 Runtime Test Generator? (org.antlr:antlr4-runtime-testsuite) 4.13.2: : What is the release version for ANTLR 4 Tool Tests? (org.antlr:antlr4-tool-testsuite) 4.13.2: : What is SCM release tag or label for ANTLR 4? (org.antlr:antlr4-master) antlr4-master-4.13.2: : 4.13.2 What is the new development version for ANTLR 4? (org.antlr:antlr4-master) 4.13.3-SNAPSHOT:Maven 会遍历所有 pom.xml把版本从4.13.2-SNAPSHOT改为4.13.2发布随后再执行mvn release:perform -Darguments-DskipTestsrelease:perform会把 pom 版本改回下一个开发版本如4.13.3-SNAPSHOT与当前仓库根 pom.xml 中的状态一致并通过 git 推送 pom 变更与 tag。-Darguments-DskipTests用于在发布构建中跳过测试。GPG 签名与 class 文件版本校验发布涉及 GPG 签名需要先安装 gpg 并生成、发布公钥再在.m2/settings.xml中指向该公钥。在部分环境下 gpg 取不到 tty 会失败需要先导出export GPG_TTY$(tty)发布构建完成后可用od校验生成的 class 文件字节码版本。Java 11 编译产物应为0x37十进制 55出现在 class 文件魔数0xCAFEBABE之后od -h tool/target/classes/org/antlr/v4/Tool.class | head -1 0000000 feca beba 0000 3700 ed04 0207 0a9d 0100 ^^同时确认 runtime 的 class 版本符合预期示例输出中0x34即 Java 8 的 52od -h runtime/Java/target/classes/org/antlr/v4/runtime/Token.class | head -1根 pom.xml 当前配置maven.compiler.source/target为 11因此发版时 Tool.class 应呈现 Java 11 的0x37字节码版本。关闭并发布 Staging Repositoryrelease:perform之后构件位于 Sonatype 的暂存仓库需要在 Sonatype 管理界面左侧进入Staging Repositories选中本次暂存仓库执行Close校验构件与签名刷新后再执行Release。发布成功后构件会同步到 Maven Central 的org/antlr组下所有历史版本可在 Central 仓库的org.antlr:antlr4-runtime路径下查看。5. 多语言运行时分发ANTLR 4 的各个运行时目标使用各自生态的包管理器发布各自有独立的账号与权限要求。5.1 JavaScriptnpmnpm 包发布前需要先构建产物npm run build文档特别提醒npm publish时不要带上antlr4目录否则可能意外推送旧版本cd runtime/JavaScript rm -rf node_modules npm update npm install npm run build npm login # 需要 npmjs.com 账号支持 2FA npm publish构建与发布均在 runtime/JavaScript 目录内进行包名与版本见 runtime/JavaScript/package.json。发布后再把源码打成 zip 归档到网站下载区cd src zip -r ~/antlr/sites/website-antlr4/download/antlr-javascript-runtime-4.13.2.zip .5.2 C#NuGetC# 目标受制于构建环境只能从 Windows 机器发布因为 macOS 上的 Visual Studio for Mac 只能构建 netstandard2.0 版本。前置条件为安装msbuild与nuget。先构建 Release 版本并校验强名称签名项目通过Antlr4.snk与SignAssemblytrue/SignAssembly启用签名见 runtime/CSharp/src/Antlr4.csprojcd runtime/CSharp/src dotnet build -c Release Antlr4.csproj确认bin/Release下同时存在 netstandard2.0 与 net45 两个目标csproj 中net45;netstandard2.0仅在 Windows 上启用并逐个校验 DLL 签名sn -v bin/Release/netstandard2.0/Antlr4.Runtime.Standard.dll sn -v bin/Release/net45/Antlr4.Runtime.Standard.dll两者都应输出 valid 之类的有效签名提示。发布到 NuGet 有两种方式一是登录 NuGet 网站手动上传Antlr4.Runtime.Standard.version.nupkg二是在命令行用 NuGet API key 推送cd bin/Release nuget push Antlr4.Runtime.Standard.version.nupkg your-key -Source https://www.nuget.org/api/v2/package需要你具有 ANTLR 4 Standard Runtime 包的 NuGet owner 权限。5.3 PythonPyPItwinePython 目标使用twine上传到 PyPI面向 Python 3。首先配置~/.pypirc同样收紧文件权限为 600[distutils] # this tells distutils what package indexes you can push to index-servers pypi pypitest [pypi] username: parrt password: xxx [pypitest] username: parrt password: xxx然后构建并上传sdist 与 wheel 两个产物都传cd runtime/Python3 python -m build # assume you have ~/.pypirc set up twine upload dist/antlr4_python3_runtime-4.13.2.tar.gz dist/antlr4_python3_runtime-4.13.2-py3-none-any.whl包的元数据名称antlr4-python3-runtime、版本号、pygrun入口脚本等定义在 runtime/Python3/pyproject.toml源码布局为src目录package-dir { src}。5.4 C四平台部署脚本C 目标是最复杂的发布场景因为需要覆盖多个平台、多种构建形态平台发布内容WindowsVS 2017 / VS 2019 对应的静态库与动态库 头文件32/64 位、Debug/Release 各一份macOS静态库与动态库Release 头文件iOS不发布预编译库仅提供源码 zip含 Xcode 工程由用户自行构建Linux不发布预编译库仅提供源码 zip含 cmake 文件由用户自行构建iOS 不做预编译库的原因是签名依赖活跃的 iOS 开发者账号因此与 Linux 一样交给用户自行构建。仓库 runtime/Cpp 下提供了三个部署脚本macOS在装有 Xcode 7 的 Mac 上执行./deploy-macos.sh源码包在任何 Linux 或 Mac 上执行./deploy-source.sh打包源码与 cmake 构建文件Windows执行deploy-windows.cmd脚本会检测 VS 2017 / VS 2019 是否安装为每个找到的版本构建对应二进制需要安装 7-Zip 并把其加入 PATH。示例流程Mac 上cd runtime/Cpp rm CMakeCache.txt # 否则可能找不到部分 include 文件 ./deploy-macos.sh cp antlr4-cpp-runtime-macos.zip ~/antlr/sites/website-antlr4/download/antlr4-cpp-runtime-4.13.2-macos.zip源码包流程任意 Mac/Linuxcd runtime/Cpp ./deploy-source.sh cp antlr4-cpp-runtime-source.zip ~/antlr/sites/website-antlr4/download/antlr4-cpp-runtime-4.13.2-source.zipWindows 流程cd runtime/Cpp deploy-windows.cmd Community cp antlr4-cpp-runtime-vs2019.zip ~/antlr/sites/website-antlr4/download/antlr4-cpp-runtime-4.13.2-vs2019.zip最后把 zip 归档提交到网站仓库注意先按需重命名成带具体版本号的文件名pushd ~/antlr/sites/website-antlr4/download git add antlr4-cpp-runtime-4.13.2-macos.zip git add antlr4-cpp-runtime-4.13.2-windows.zip git add antlr4-cpp-runtime-4.13.2-source.zip git commit -a -m update C runtime git push origin gh-pages popdC 运行时的版本号同时存在于 runtime/Cpp/VERSION内容为4.13.2与 runtime/Cpp/runtime/src/Version.h 的宏定义中后者由update_antlr_version.py提示需手工维护。5.5 Dartpub.devDart 目标需要先安装 Dart SDK然后直接发布到 pub.devcd runtime/Dart dart pub publish发布时 pub 会提示新版本未找到 changelog输入N忽略该警告即可继续。包名与版本见 runtime/Dart/pubspec.yaml。6. 更新官网版本号、Javadoc 与 jar6.1 一键脚本官方提供了 scripts/deploy_to_website.py 完成网站版本号更新、Javadoc 解压与 jar 拷贝的自动化部分cd ~/antlr/code/antlr4 python scripts/deploy_to_website.py 4.13.1 4.13.2脚本依次执行更新网站端需要改版本的 4 个文件download.html、index.html、api/index.html、scripts/topnav.js从本地 Maven 仓库解压三份 javadoc jar 到网站的api/Java来自antlr4-runtime-4.13.2-javadoc.jar、api/JavaTool来自antlr4-4.13.2-javadoc.jar与api/maven-plugin/latest来自antlr4-maven-plugin-4.13.2-javadoc.jar从本地 Maven 仓库拷贝antlr4-runtime-4.13.2.jar与antlr4-4.13.2-complete.jar到网站download/目录并git add。脚本输出的Javadoc copied / Jars copied清单即为核对依据。注意运行时与工具的 javadoc jar 就位于本地 Maven 仓库org/antlr组下路径形如~/.m2/repository/org/antlr/antlr4-runtime/4.13.2/antlr4-runtime-4.13.2-javadoc.jar——这正是第 4 节 Maven 发布产物的直接复用。6.2 手工收尾自动化完成后仍需人工操作cd ~/antlr/sites/website-antlr4 git commit -a -m Update website, javadoc, jars to 4.13.2 git push origin gh-pages因为deploy_to_website.py只负责文件操作不代替维护者提交代码。7. 发版后收尾7.1 同步 dev 分支正式发布合入 master 后需要把 master 同步回 dev让下一个开发周期从已发布状态继续git checkout master git pull upstream master git checkout dev git pull upstream dev git merge master git push origin dev git push upstream dev7.2 其他发布跟进项文档列出的发版后事项还包括使用新版本 antlr jar 重新构建 ANTLR Intellij 插件在 GitHub Releases 页面编写发布说明release notes列出新特性、修复与破坏性变更更新 lab.antlr.org 在线实验站点。这些步骤通常由维护者在发版当天完成其中发布说明是用户感知版本变更的主要入口可结合仓库根目录的 CHANGES.txt 整理变更清单。8. 发版清单速览将全文压缩为一份可执行的检查清单Gitdev合入master确认 DCO 强制校验开启删除旧版本 taggit tag -d 推空 refs 到 origin/upstream。版本号python scripts/update_antlr_version.py 旧 新更新 scripts/files-to-update.txt 中的文件手工改 runtime/Cpp/runtime/src/Version.h确认 RuntimeMetaData.java 无-SNAPSHOTmvn cleanfind/grep扫描残留版本独立仓库更新 PHP runtime 版本并发布。XPath 解析器大版本ATN 序列化变更时用antlr4-4.13.2-SNAPSHOT-complete.jar重新生成 Cpp / CSharp / Python3 的 XPath 解析器。Maven配置~/.m2/settings.xmlstaging 账号 GPGmvn install -DskipTests mvn deploy -DskipTests推快照mvn release:prepare -Darguments-DskipTests与mvn release:performexport GPG_TTY$(tty)用od校验 class 字节码版本Sonatype 上 Close → Release staging repository。运行时目标JavaScript 走 npm publishC# 在 Windows 上dotnet buildsn -v验签 NuGet 推送Python 用python -m buildtwine uploadC 用 runtime/Cpp 下三个部署脚本产出 macOS/Windows/source 三种 zipDart 用dart pub publish。官网python scripts/deploy_to_website.py 旧 新更新版本号、解压 javadoc、拷贝 jar然后手工 commit/push gh-pages。收尾dev 重新同步 master重建 Intellij 插件写 GitHub release notes更新 lab.antlr.org。参考文件索引发布主文档doc/releasing-antlr.md版本更新脚本scripts/update_antlr_version.py、scripts/files-to-update.txt网站部署脚本scripts/deploy_to_website.py版本常量实现runtime/Java/src/org/antlr/v4/runtime/RuntimeMetaData.java、runtime/Swift/Sources/Antlr4/RuntimeMetaData.swift、runtime/Cpp/runtime/src/Version.h构建与发布配置pom.xml、runtime/CSharp/src/Antlr4.csproj、runtime/Python3/pyproject.toml、runtime/Dart/pubspec.yaml、runtime/JavaScript/package.jsonC 多平台部署runtime/Cpp/deploy-macos.sh、runtime/Cpp/deploy-source.sh、runtime/Cpp/deploy-windows.cmd贡献与发布历史CONTRIBUTING.md、CHANGES.txt、developer-cert-of-origin.txt【免费下载链接】antlr4ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.项目地址: https://gitcode.com/gh_mirrors/an/antlr4创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/20 21:41:51

BrewUI:macOS上Homebrew的图形化包管理客户端,告别命令行依赖

1. 为什么我放着好好的命令行不用,偏要找Homebrew的图形界面先说结论:BrewUI 是 macOS 上一款专门给 Homebrew 做图形化封装的客户端,它的定位非常清晰——让你不敲命令行也能完成绝大多数 Homebrew 包管理操作。Homebrew 是 macOS 生态里最主…

2026/9/20 22:46:55

从康师傅看自动补货:快消供应链的库存优化与需求预测

简介:这份128页PPT深度复盘康师傅智慧供应链管理一体化体系与自动补货优化项目,面向供应链管理、需求计划、IT系统实施及快消品行业从业者,展示从需求预测、库存优化到S&OP产销协同、SAP/Oracle系统集成的端到端解决思路。包体仅含1个ppt…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码