Как заставить Grammarinator работать с грамматикой openqasm3

#quantum-computing #qiskit

Вопрос:

Я пытался заставить grammarinator генерировать случайные тестовые программы на основе грамматики openQasm3.0 (https://github.com/Qiskit/openqasm/blob/master/source/grammar/qasm3.g4 ), То, что я хочу получить, это:

qasm3.g4 -> Antlr4py3 -> * .g4 files -> Grammarinator-generate -> набор допустимых программных файлов в качестве тестов.

Пока что я получил:

  1. antlr4py3 -o ./somedir qasm3.g4 (который основан на инструкциях, приведенных на openqasm github)
  2. Шаг 1 дал кучу файлов, самое главное: qasm3Lexer.py , qasm3Parser.py , qasm3Lexer.токены, qasm3tokens.
  3. Когда я посмотрел на них, они, похоже, не отражают того, что ожидает grammarinator. Основываясь на информации и примерах, которые я прочитал в Интернете, мне нужно передать grammarinator-process и grammarinator-generate с некоторыми файлами g4, такими как qasm3Lexer4 и qasm3Parser.g4 и т. Д., Но я не могу найти их с шага 2. Я попытался передать им файлы * .py с шага 2, но они сгенерировали бессмысленные тестовые программы.

Вот некоторые из команд, которые я пробовал:

i) grammarinator-обработать qasm3Lexer.tokens qasm3.tokens -o

ii) grammarinator -обработать вывод qasm3.g4 -o

Далее следует: grammarinator-generate -l qasm3Unlexer.py -п qasm3Uparser.py -r программа -n номер -d глубина -o test.txt

Я также пробовал различные комбинации, сравнивал образцы с тем, что есть в qasm3, но безрезультатно, и я потерялся. Просто интересно, может ли кто-нибудь дать мне несколько советов о том, как действовать дальше? Заранее спасибо.

Ответ №1:

Извините за это. Я определенно неправильно понял пару вещей о antlr4 и grammarinator. Последний ожидает ввода qasm3.g4, который затем генерирует соответствующие Unlexer и Unparser. Таким образом, процесс выглядит следующим образом: qasm3.g4 (из github) -> либо antlr4, либо grammarinator -> выходы.

В итоге мне удалось заставить grammarinator генерировать некоторые тестовые программы, загрузив в него файл qasm3.g4:

  1. grammarinator-process qasm3.g4 -o outputdir <— этот процесс генерирует два файла, а именно qasm3Unlexer.py и qasm3Unparser.py , и они используются на следующем шаге для создания тестовых программ.
  2. grammarinator-generate -l outputdir/qasm3Unlexer.py -п outputdir/qasm3Unparser.py -программа r (или что-то, что вы хотите протестировать на основе qasm3.g4) -n somenum -d somedepth -o outputdir/test_%d.txt