You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Grammarinator基于openqasm3语法生成有效随机测试程序

核心错误原因

你预设的执行链路存在错误:antlr4py3的作用是根据.g4语法文件生成Python版本的词法/语法解析器代码,无法产出拆分后的qasm3Lexer.g4、qasm3Parser.g4文件,这是你后续所有操作无效的根源。

正确操作流程

1. 拆分合并版qasm3.g4为独立的词法、语法文件

你使用的qasm3.g4是合并了词法规则、语法规则的单文件,Grammarinator要求输入拆分后的两类.g4文件,拆分规则如下:

  • 新建qasm3Lexer.g4,仅保留原文件中所有词法相关规则:包括fragment定义、关键字定义、符号定义、词法匹配规则,文件头声明为lexer grammar qasm3Lexer;
  • 新建qasm3Parser.g4,仅保留原文件中所有语法相关规则,文件头增加如下内容:
grammar qasm3Parser;
options { tokenVocab=qasm3Lexer; }

2. 生成Grammarinator专属的Unlexer和Unparser文件

执行如下命令:
grammarinator-process qasm3Lexer.g4 qasm3Parser.g4 -o ./grammarinator_output
执行完成后,输出目录会生成qasm3LexerUnlexer.py、qasm3ParserUnparser.py两个核心文件。

3. 生成有效OpenQASM3测试用例

执行如下命令,注意替换你需要的生成数量、深度参数:
grammarinator-generate -l ./grammarinator_output/qasm3LexerUnlexer.py -p ./grammarinator_output/qasm3ParserUnparser.py -r program -n 100 -d 20 -o ./test_cases/test_%d.qasm

参数说明:

  • -r program 指定生成入口为语法的顶层规则,需和原g4文件中的顶层规则名完全匹配
  • -d 20 指定生成语法树的最大深度,取值过小将导致用例不完整,取值过大将增加生成耗时
  • -n 100 指定生成100个测试用例,输出路径中的%d会自动替换为用例序号

异常排查方案

  • 生成用例存在语法错误:优先检查拆分后的两个.g4文件是否遗漏了规则,原g4中的语义断言、自定义动作默认会被Grammarinator忽略,若需生成符合语义约束的用例,需自行补充Grammarinator生成规则
  • 生成过程报规则不存在错误:核对入口规则名拼写、Unlexer/Unparser文件路径是否正确

内容的提问来源于stack exchange,提问作者Ming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:15:04