Documentation
¶
Index ¶
- Constants
- Variables
- func Pow(u *matrix.Matrix, p float64) *matrix.Matrix
- type Environ
- func (e *Environ) GetClassicalBit(name string) ([]int64, bool)
- func (e *Environ) GetConst(name string) (any, bool)
- func (e *Environ) GetGate(name string) (*Gate, bool)
- func (e *Environ) GetQubit(name string) ([]q.Qubit, bool)
- func (e *Environ) GetSubroutine(name string) (*Subroutine, bool)
- func (e *Environ) GetVariable(name string) (any, bool)
- func (e *Environ) NewEnclosed() *Environ
- func (e *Environ) SetVariable(name string, value any)
- type Gate
- type Subroutine
- type Visitor
- func (v *Visitor) Builtin(ctx *parser.GateCallStatementContext) (*matrix.Matrix, bool, error)
- func (v *Visitor) Enclosed() *Visitor
- func (v *Visitor) MeasureAssignment(identifier parser.IIndexedIdentifierContext, ...) error
- func (v *Visitor) Params(xlist parser.IExpressionListContext) ([]float64, error)
- func (v *Visitor) Run(tree antlr.ParseTree) error
- func (v *Visitor) Visit(tree antlr.ParseTree) any
- func (v *Visitor) VisitAdditiveExpression(ctx *parser.AdditiveExpressionContext) any
- func (v *Visitor) VisitAliasDeclarationStatement(ctx *parser.AliasDeclarationStatementContext) any
- func (v *Visitor) VisitAliasExpression(ctx *parser.AliasExpressionContext) any
- func (v *Visitor) VisitAnnotation(ctx *parser.AnnotationContext) any
- func (v *Visitor) VisitArgumentDefinition(ctx *parser.ArgumentDefinitionContext) any
- func (v *Visitor) VisitArgumentDefinitionList(ctx *parser.ArgumentDefinitionListContext) any
- func (v *Visitor) VisitArrayLiteral(ctx *parser.ArrayLiteralContext) any
- func (v *Visitor) VisitArrayReferenceType(ctx *parser.ArrayReferenceTypeContext) any
- func (v *Visitor) VisitArrayType(ctx *parser.ArrayTypeContext) any
- func (v *Visitor) VisitAssignmentStatement(ctx *parser.AssignmentStatementContext) any
- func (v *Visitor) VisitBarrierStatement(ctx *parser.BarrierStatementContext) any
- func (v *Visitor) VisitBitshiftExpression(ctx *parser.BitshiftExpressionContext) any
- func (v *Visitor) VisitBitwiseAndExpression(ctx *parser.BitwiseAndExpressionContext) any
- func (v *Visitor) VisitBitwiseOrExpression(ctx *parser.BitwiseOrExpressionContext) any
- func (v *Visitor) VisitBitwiseXorExpression(ctx *parser.BitwiseXorExpressionContext) any
- func (v *Visitor) VisitBoxStatement(ctx *parser.BoxStatementContext) any
- func (v *Visitor) VisitBreakStatement(ctx *parser.BreakStatementContext) any
- func (v *Visitor) VisitCalStatement(ctx *parser.CalStatementContext) any
- func (v *Visitor) VisitCalibrationGrammarStatement(ctx *parser.CalibrationGrammarStatementContext) any
- func (v *Visitor) VisitCallExpression(ctx *parser.CallExpressionContext) any
- func (v *Visitor) VisitCastExpression(ctx *parser.CastExpressionContext) any
- func (v *Visitor) VisitChildren(node antlr.RuleNode) any
- func (v *Visitor) VisitClassicalDeclarationStatement(ctx *parser.ClassicalDeclarationStatementContext) any
- func (v *Visitor) VisitComparisonExpression(ctx *parser.ComparisonExpressionContext) any
- func (v *Visitor) VisitConstDeclarationStatement(ctx *parser.ConstDeclarationStatementContext) any
- func (v *Visitor) VisitContinueStatement(ctx *parser.ContinueStatementContext) any
- func (v *Visitor) VisitDeclarationExpression(ctx *parser.DeclarationExpressionContext) any
- func (v *Visitor) VisitDefStatement(ctx *parser.DefStatementContext) any
- func (v *Visitor) VisitDefcalArgumentDefinition(ctx *parser.DefcalArgumentDefinitionContext) any
- func (v *Visitor) VisitDefcalArgumentDefinitionList(ctx *parser.DefcalArgumentDefinitionListContext) any
- func (v *Visitor) VisitDefcalOperand(ctx *parser.DefcalOperandContext) any
- func (v *Visitor) VisitDefcalOperandList(ctx *parser.DefcalOperandListContext) any
- func (v *Visitor) VisitDefcalStatement(ctx *parser.DefcalStatementContext) any
- func (v *Visitor) VisitDefcalTarget(ctx *parser.DefcalTargetContext) any
- func (v *Visitor) VisitDelayStatement(ctx *parser.DelayStatementContext) any
- func (v *Visitor) VisitDesignator(ctx *parser.DesignatorContext) any
- func (v *Visitor) VisitDurationofExpression(ctx *parser.DurationofExpressionContext) any
- func (v *Visitor) VisitEndStatement(ctx *parser.EndStatementContext) any
- func (v *Visitor) VisitEqualityExpression(ctx *parser.EqualityExpressionContext) any
- func (v *Visitor) VisitErrorNode(node antlr.ErrorNode) any
- func (v *Visitor) VisitExpressionList(ctx *parser.ExpressionListContext) any
- func (v *Visitor) VisitExpressionStatement(ctx *parser.ExpressionStatementContext) any
- func (v *Visitor) VisitExternArgument(ctx *parser.ExternArgumentContext) any
- func (v *Visitor) VisitExternArgumentList(ctx *parser.ExternArgumentListContext) any
- func (v *Visitor) VisitExternStatement(ctx *parser.ExternStatementContext) any
- func (v *Visitor) VisitForStatement(ctx *parser.ForStatementContext) any
- func (v *Visitor) VisitGateCallStatement(ctx *parser.GateCallStatementContext) any
- func (v *Visitor) VisitGateModifier(ctx *parser.GateModifierContext) any
- func (v *Visitor) VisitGateOperand(ctx *parser.GateOperandContext) any
- func (v *Visitor) VisitGateOperandList(ctx *parser.GateOperandListContext) any
- func (v *Visitor) VisitGateStatement(ctx *parser.GateStatementContext) any
- func (v *Visitor) VisitIdentifierList(ctx *parser.IdentifierListContext) any
- func (v *Visitor) VisitIfStatement(ctx *parser.IfStatementContext) any
- func (v *Visitor) VisitIncludeStatement(ctx *parser.IncludeStatementContext) any
- func (v *Visitor) VisitIndexExpression(ctx *parser.IndexExpressionContext) any
- func (v *Visitor) VisitIndexOperator(ctx *parser.IndexOperatorContext) any
- func (v *Visitor) VisitIndexedIdentifier(ctx *parser.IndexedIdentifierContext) any
- func (v *Visitor) VisitIoDeclarationStatement(ctx *parser.IoDeclarationStatementContext) any
- func (v *Visitor) VisitLiteralExpression(ctx *parser.LiteralExpressionContext) any
- func (v *Visitor) VisitLogicalAndExpression(ctx *parser.LogicalAndExpressionContext) any
- func (v *Visitor) VisitLogicalOrExpression(ctx *parser.LogicalOrExpressionContext) any
- func (v *Visitor) VisitMeasureArrowAssignmentStatement(ctx *parser.MeasureArrowAssignmentStatementContext) any
- func (v *Visitor) VisitMeasureExpression(ctx *parser.MeasureExpressionContext) any
- func (v *Visitor) VisitMultiplicativeExpression(ctx *parser.MultiplicativeExpressionContext) any
- func (v *Visitor) VisitOldStyleDeclarationStatement(ctx *parser.OldStyleDeclarationStatementContext) any
- func (v *Visitor) VisitParenthesisExpression(ctx *parser.ParenthesisExpressionContext) any
- func (v *Visitor) VisitPowerExpression(ctx *parser.PowerExpressionContext) any
- func (v *Visitor) VisitPragma(ctx *parser.PragmaContext) any
- func (v *Visitor) VisitProgram(ctx *parser.ProgramContext) any
- func (v *Visitor) VisitQuantumDeclarationStatement(ctx *parser.QuantumDeclarationStatementContext) any
- func (v *Visitor) VisitQubitType(ctx *parser.QubitTypeContext) any
- func (v *Visitor) VisitRangeExpression(ctx *parser.RangeExpressionContext) any
- func (v *Visitor) VisitResetStatement(ctx *parser.ResetStatementContext) any
- func (v *Visitor) VisitReturnSignature(ctx *parser.ReturnSignatureContext) any
- func (v *Visitor) VisitReturnStatement(ctx *parser.ReturnStatementContext) any
- func (v *Visitor) VisitScalarType(ctx *parser.ScalarTypeContext) any
- func (v *Visitor) VisitScope(ctx *parser.ScopeContext) any
- func (v *Visitor) VisitSetExpression(ctx *parser.SetExpressionContext) any
- func (v *Visitor) VisitStatement(ctx *parser.StatementContext) any
- func (v *Visitor) VisitStatementOrScope(ctx *parser.StatementOrScopeContext) any
- func (v *Visitor) VisitSwitchCaseItem(ctx *parser.SwitchCaseItemContext) any
- func (v *Visitor) VisitSwitchStatement(ctx *parser.SwitchStatementContext) any
- func (v *Visitor) VisitTerminal(node antlr.TerminalNode) any
- func (v *Visitor) VisitUnaryExpression(ctx *parser.UnaryExpressionContext) any
- func (v *Visitor) VisitVersion(ctx *parser.VersionContext) any
- func (v *Visitor) VisitWhileStatement(ctx *parser.WhileStatementContext) any
Examples ¶
- Environ.GetGate
- Environ.GetSubroutine
- Environ.NewEnclosed
- Environ.SetVariable
- Visitor (Comment)
- Visitor.Run
- Visitor.Run (Err)
- Visitor.VisitIncludeStatement
- Visitor.VisitIncludeStatement (FileNotFound)
- Visitor.VisitIncludeStatement (Invalid)
- Visitor.VisitPragma
- Visitor.VisitResetStatement
- Visitor.VisitVersion
Constants ¶
View Source
const ( Break string = "break;" Continue string = "continue;" )
View Source
const U string = "U"
Variables ¶
View Source
var ( ErrAlreadyDeclared = errors.New("already declared") ErrIdentifierNotFound = errors.New("identifier not found") ErrQubitNotFound = errors.New("qubit not found") ErrClassicalBitNotFound = errors.New("classical bit not found") ErrVariableNotFound = errors.New("variable not found") ErrGateNotFound = errors.New("gate not found") ErrFunctionNotFound = errors.New("function not found") ErrUnexpected = errors.New("unexpected") ErrNotImplemented = errors.New("not implemented") )
Functions ¶
Types ¶
type Environ ¶
type Environ struct {
Version string
Const map[string]any
Variable map[string]any
Qubit map[string][]q.Qubit
ClassicalBit map[string][]int64
Gate map[string]*Gate
Subroutine map[string]*Subroutine
Outer *Environ
}
func NewEnviron ¶
func NewEnviron() *Environ
func (*Environ) GetGate ¶
Example ¶
package main
import (
"fmt"
"github.com/itsubaki/qasm/visitor"
)
func main() {
env := visitor.NewEnviron()
env.Gate["x"] = &visitor.Gate{
Name: "x",
}
g, ok := env.GetGate("x")
fmt.Println(g.Name, ok)
enclosed := env.NewEnclosed()
encg, ok := enclosed.GetGate("x")
fmt.Println(encg.Name, ok)
}
Output: x true x true
func (*Environ) GetSubroutine ¶
func (e *Environ) GetSubroutine(name string) (*Subroutine, bool)
Example ¶
package main
import (
"fmt"
"github.com/itsubaki/qasm/visitor"
)
func main() {
env := visitor.NewEnviron()
env.Subroutine["qft"] = &visitor.Subroutine{
Name: "qft",
}
enclosed := env.NewEnclosed()
sub, ok := enclosed.GetSubroutine("qft")
fmt.Println(sub.Name, ok)
}
Output: qft true
func (*Environ) NewEnclosed ¶
Example ¶
package main
import (
"fmt"
"github.com/itsubaki/q"
"github.com/itsubaki/qasm/visitor"
)
func main() {
env := visitor.NewEnviron()
env.Qubit["q0"] = []q.Qubit{0, 1}
env.ClassicalBit["c0"] = []int64{0, 1}
enclosed := env.NewEnclosed()
enclosed.Qubit["q1"] = []q.Qubit{2, 3}
enclosed.ClassicalBit["c1"] = []int64{2, 3}
fmt.Println(enclosed.GetQubit("q0"))
fmt.Println(enclosed.GetQubit("q1"))
fmt.Println(enclosed.GetClassicalBit("c0"))
fmt.Println(enclosed.GetClassicalBit("c1"))
}
Output: [0 1] true [2 3] true [0 1] true [2 3] true
func (*Environ) SetVariable ¶
Example ¶
package main
import (
"fmt"
"github.com/itsubaki/qasm/visitor"
)
func main() {
env := visitor.NewEnviron()
env.SetVariable("a", 42)
fmt.Println("env:", env.Variable)
enclosed := env.NewEnclosed()
enclosed.SetVariable("a", 43)
fmt.Println("env:", env.Variable)
fmt.Println("enclosed:", enclosed.Variable)
enclosed.SetVariable("b", 100)
enclosed.SetVariable("b", 101)
fmt.Println("env:", env.Variable)
fmt.Println("enclosed:", enclosed.Variable)
}
Output: env: map[a:42] env: map[a:43] enclosed: map[] env: map[a:43] enclosed: map[b:101]
type Gate ¶
type Gate struct {
Name string
Params []string
QArgs []string
Body []*parser.GateCallStatementContext
}
type Subroutine ¶
type Subroutine struct {
Name string
QArgs []string
Body *parser.ScopeContext
}
type Visitor ¶
type Visitor struct {
// contains filtered or unexported fields
}
Example (Comment) ¶
text := `
// this is a comment
/* this is a comment block */
end;
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
tree := p.Program()
fmt.Println(tree.ToStringTree(nil, p))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Visit(tree); err != nil {
fmt.Println(err)
}
fmt.Println(env.Version)
Output: (program (statementOrScope (statement (endStatement end ;))) <EOF>) end;
func (*Visitor) MeasureAssignment ¶
func (v *Visitor) MeasureAssignment(identifier parser.IIndexedIdentifierContext, measure parser.IMeasureExpressionContext) error
func (*Visitor) Params ¶
func (v *Visitor) Params(xlist parser.IExpressionListContext) ([]float64, error)
func (*Visitor) Run ¶ added in v0.1.2
Example ¶
text := `
OPENQASM 3.0;
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Run(p.Program()); err != nil {
fmt.Println(err)
}
fmt.Println(env.Version)
Output: 3.0
Example (Err) ¶
text := `
const int a = 42;
const int a = 43;
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Run(p.Program()); err != nil {
fmt.Println(err)
}
Output: visit: identifier=a: already declared
func (*Visitor) VisitAdditiveExpression ¶
func (v *Visitor) VisitAdditiveExpression(ctx *parser.AdditiveExpressionContext) any
func (*Visitor) VisitAliasDeclarationStatement ¶
func (v *Visitor) VisitAliasDeclarationStatement(ctx *parser.AliasDeclarationStatementContext) any
func (*Visitor) VisitAliasExpression ¶
func (v *Visitor) VisitAliasExpression(ctx *parser.AliasExpressionContext) any
func (*Visitor) VisitAnnotation ¶
func (v *Visitor) VisitAnnotation(ctx *parser.AnnotationContext) any
func (*Visitor) VisitArgumentDefinition ¶
func (v *Visitor) VisitArgumentDefinition(ctx *parser.ArgumentDefinitionContext) any
func (*Visitor) VisitArgumentDefinitionList ¶
func (v *Visitor) VisitArgumentDefinitionList(ctx *parser.ArgumentDefinitionListContext) any
func (*Visitor) VisitArrayLiteral ¶
func (v *Visitor) VisitArrayLiteral(ctx *parser.ArrayLiteralContext) any
func (*Visitor) VisitArrayReferenceType ¶
func (v *Visitor) VisitArrayReferenceType(ctx *parser.ArrayReferenceTypeContext) any
func (*Visitor) VisitArrayType ¶
func (v *Visitor) VisitArrayType(ctx *parser.ArrayTypeContext) any
func (*Visitor) VisitAssignmentStatement ¶
func (v *Visitor) VisitAssignmentStatement(ctx *parser.AssignmentStatementContext) any
func (*Visitor) VisitBarrierStatement ¶
func (v *Visitor) VisitBarrierStatement(ctx *parser.BarrierStatementContext) any
func (*Visitor) VisitBitshiftExpression ¶
func (v *Visitor) VisitBitshiftExpression(ctx *parser.BitshiftExpressionContext) any
func (*Visitor) VisitBitwiseAndExpression ¶
func (v *Visitor) VisitBitwiseAndExpression(ctx *parser.BitwiseAndExpressionContext) any
func (*Visitor) VisitBitwiseOrExpression ¶
func (v *Visitor) VisitBitwiseOrExpression(ctx *parser.BitwiseOrExpressionContext) any
func (*Visitor) VisitBitwiseXorExpression ¶
func (v *Visitor) VisitBitwiseXorExpression(ctx *parser.BitwiseXorExpressionContext) any
func (*Visitor) VisitBoxStatement ¶
func (v *Visitor) VisitBoxStatement(ctx *parser.BoxStatementContext) any
func (*Visitor) VisitBreakStatement ¶
func (v *Visitor) VisitBreakStatement(ctx *parser.BreakStatementContext) any
func (*Visitor) VisitCalStatement ¶
func (v *Visitor) VisitCalStatement(ctx *parser.CalStatementContext) any
func (*Visitor) VisitCalibrationGrammarStatement ¶
func (v *Visitor) VisitCalibrationGrammarStatement(ctx *parser.CalibrationGrammarStatementContext) any
func (*Visitor) VisitCallExpression ¶
func (v *Visitor) VisitCallExpression(ctx *parser.CallExpressionContext) any
func (*Visitor) VisitCastExpression ¶
func (v *Visitor) VisitCastExpression(ctx *parser.CastExpressionContext) any
func (*Visitor) VisitClassicalDeclarationStatement ¶
func (v *Visitor) VisitClassicalDeclarationStatement(ctx *parser.ClassicalDeclarationStatementContext) any
func (*Visitor) VisitComparisonExpression ¶
func (v *Visitor) VisitComparisonExpression(ctx *parser.ComparisonExpressionContext) any
func (*Visitor) VisitConstDeclarationStatement ¶
func (v *Visitor) VisitConstDeclarationStatement(ctx *parser.ConstDeclarationStatementContext) any
func (*Visitor) VisitContinueStatement ¶
func (v *Visitor) VisitContinueStatement(ctx *parser.ContinueStatementContext) any
func (*Visitor) VisitDeclarationExpression ¶
func (v *Visitor) VisitDeclarationExpression(ctx *parser.DeclarationExpressionContext) any
func (*Visitor) VisitDefStatement ¶
func (v *Visitor) VisitDefStatement(ctx *parser.DefStatementContext) any
func (*Visitor) VisitDefcalArgumentDefinition ¶
func (v *Visitor) VisitDefcalArgumentDefinition(ctx *parser.DefcalArgumentDefinitionContext) any
func (*Visitor) VisitDefcalArgumentDefinitionList ¶
func (v *Visitor) VisitDefcalArgumentDefinitionList(ctx *parser.DefcalArgumentDefinitionListContext) any
func (*Visitor) VisitDefcalOperand ¶
func (v *Visitor) VisitDefcalOperand(ctx *parser.DefcalOperandContext) any
func (*Visitor) VisitDefcalOperandList ¶
func (v *Visitor) VisitDefcalOperandList(ctx *parser.DefcalOperandListContext) any
func (*Visitor) VisitDefcalStatement ¶
func (v *Visitor) VisitDefcalStatement(ctx *parser.DefcalStatementContext) any
func (*Visitor) VisitDefcalTarget ¶
func (v *Visitor) VisitDefcalTarget(ctx *parser.DefcalTargetContext) any
func (*Visitor) VisitDelayStatement ¶
func (v *Visitor) VisitDelayStatement(ctx *parser.DelayStatementContext) any
func (*Visitor) VisitDesignator ¶
func (v *Visitor) VisitDesignator(ctx *parser.DesignatorContext) any
func (*Visitor) VisitDurationofExpression ¶
func (v *Visitor) VisitDurationofExpression(ctx *parser.DurationofExpressionContext) any
func (*Visitor) VisitEndStatement ¶
func (v *Visitor) VisitEndStatement(ctx *parser.EndStatementContext) any
func (*Visitor) VisitEqualityExpression ¶
func (v *Visitor) VisitEqualityExpression(ctx *parser.EqualityExpressionContext) any
func (*Visitor) VisitExpressionList ¶
func (v *Visitor) VisitExpressionList(ctx *parser.ExpressionListContext) any
func (*Visitor) VisitExpressionStatement ¶
func (v *Visitor) VisitExpressionStatement(ctx *parser.ExpressionStatementContext) any
func (*Visitor) VisitExternArgument ¶
func (v *Visitor) VisitExternArgument(ctx *parser.ExternArgumentContext) any
func (*Visitor) VisitExternArgumentList ¶
func (v *Visitor) VisitExternArgumentList(ctx *parser.ExternArgumentListContext) any
func (*Visitor) VisitExternStatement ¶
func (v *Visitor) VisitExternStatement(ctx *parser.ExternStatementContext) any
func (*Visitor) VisitForStatement ¶
func (v *Visitor) VisitForStatement(ctx *parser.ForStatementContext) any
func (*Visitor) VisitGateCallStatement ¶
func (v *Visitor) VisitGateCallStatement(ctx *parser.GateCallStatementContext) any
func (*Visitor) VisitGateModifier ¶
func (v *Visitor) VisitGateModifier(ctx *parser.GateModifierContext) any
func (*Visitor) VisitGateOperand ¶
func (v *Visitor) VisitGateOperand(ctx *parser.GateOperandContext) any
func (*Visitor) VisitGateOperandList ¶
func (v *Visitor) VisitGateOperandList(ctx *parser.GateOperandListContext) any
func (*Visitor) VisitGateStatement ¶
func (v *Visitor) VisitGateStatement(ctx *parser.GateStatementContext) any
func (*Visitor) VisitIdentifierList ¶
func (v *Visitor) VisitIdentifierList(ctx *parser.IdentifierListContext) any
func (*Visitor) VisitIfStatement ¶
func (v *Visitor) VisitIfStatement(ctx *parser.IfStatementContext) any
func (*Visitor) VisitIncludeStatement ¶
func (v *Visitor) VisitIncludeStatement(ctx *parser.IncludeStatementContext) any
Example ¶
text := `
include "../testdata/stdgates.qasm";
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
tree := p.Program()
fmt.Println(tree.ToStringTree(nil, p))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Visit(tree); err != nil {
fmt.Println(err)
}
fmt.Println(slices.Sorted(maps.Keys(env.Gate)))
for _, s := range qsim.State() {
fmt.Println(s)
}
Output: (program (statementOrScope (statement (includeStatement include "../testdata/stdgates.qasm" ;))) <EOF>) [cx h i x y z]
Example (FileNotFound) ¶
text := `
include "file_not_found.qasm";
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
tree := p.Program()
fmt.Println(tree.ToStringTree(nil, p))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Visit(tree); err != nil {
fmt.Println(err)
}
Output: (program (statementOrScope (statement (includeStatement include "file_not_found.qasm" ;))) <EOF>) read file=file_not_found.qasm: open file_not_found.qasm: no such file or directory
Example (Invalid) ¶
text := `
include "../testdata/invalid.qasm";
qubit q;
h q;
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
tree := p.Program()
fmt.Println(tree.ToStringTree(nil, p))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Visit(tree); err != nil {
fmt.Println(err)
}
Output: (program (statementOrScope (statement (includeStatement include "../testdata/invalid.qasm" ;))) (statementOrScope (statement (quantumDeclarationStatement (qubitType qubit) q ;))) (statementOrScope (statement (gateCallStatement h (gateOperandList (gateOperand (indexedIdentifier q))) ;))) <EOF>) include: identifier=invalid: identifier not found
func (*Visitor) VisitIndexExpression ¶
func (v *Visitor) VisitIndexExpression(ctx *parser.IndexExpressionContext) any
func (*Visitor) VisitIndexOperator ¶
func (v *Visitor) VisitIndexOperator(ctx *parser.IndexOperatorContext) any
func (*Visitor) VisitIndexedIdentifier ¶
func (v *Visitor) VisitIndexedIdentifier(ctx *parser.IndexedIdentifierContext) any
func (*Visitor) VisitIoDeclarationStatement ¶
func (v *Visitor) VisitIoDeclarationStatement(ctx *parser.IoDeclarationStatementContext) any
func (*Visitor) VisitLiteralExpression ¶
func (v *Visitor) VisitLiteralExpression(ctx *parser.LiteralExpressionContext) any
func (*Visitor) VisitLogicalAndExpression ¶
func (v *Visitor) VisitLogicalAndExpression(ctx *parser.LogicalAndExpressionContext) any
func (*Visitor) VisitLogicalOrExpression ¶
func (v *Visitor) VisitLogicalOrExpression(ctx *parser.LogicalOrExpressionContext) any
func (*Visitor) VisitMeasureArrowAssignmentStatement ¶
func (v *Visitor) VisitMeasureArrowAssignmentStatement(ctx *parser.MeasureArrowAssignmentStatementContext) any
func (*Visitor) VisitMeasureExpression ¶
func (v *Visitor) VisitMeasureExpression(ctx *parser.MeasureExpressionContext) any
func (*Visitor) VisitMultiplicativeExpression ¶
func (v *Visitor) VisitMultiplicativeExpression(ctx *parser.MultiplicativeExpressionContext) any
func (*Visitor) VisitOldStyleDeclarationStatement ¶
func (v *Visitor) VisitOldStyleDeclarationStatement(ctx *parser.OldStyleDeclarationStatementContext) any
func (*Visitor) VisitParenthesisExpression ¶
func (v *Visitor) VisitParenthesisExpression(ctx *parser.ParenthesisExpressionContext) any
func (*Visitor) VisitPowerExpression ¶
func (v *Visitor) VisitPowerExpression(ctx *parser.PowerExpressionContext) any
func (*Visitor) VisitPragma ¶
func (v *Visitor) VisitPragma(ctx *parser.PragmaContext) any
Example ¶
text := ` pragma qiskit.simulator noise model "qpu1.noise"; ` lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text)) p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)) tree := p.Program() fmt.Println(tree.ToStringTree(nil, p)) qsim := q.New() env := visitor.NewEnviron() v := visitor.New(qsim, env) fmt.Println(v.Visit(tree))
Output: (program (statementOrScope (statement (pragma pragma qiskit.simulator noise model "qpu1.noise";))) <EOF>) qiskit.simulator noise model "qpu1.noise";
func (*Visitor) VisitProgram ¶
func (v *Visitor) VisitProgram(ctx *parser.ProgramContext) any
func (*Visitor) VisitQuantumDeclarationStatement ¶
func (v *Visitor) VisitQuantumDeclarationStatement(ctx *parser.QuantumDeclarationStatementContext) any
func (*Visitor) VisitQubitType ¶
func (v *Visitor) VisitQubitType(ctx *parser.QubitTypeContext) any
func (*Visitor) VisitRangeExpression ¶
func (v *Visitor) VisitRangeExpression(ctx *parser.RangeExpressionContext) any
func (*Visitor) VisitResetStatement ¶
func (v *Visitor) VisitResetStatement(ctx *parser.ResetStatementContext) any
Example ¶
text := `
qubit q;
U(pi/2, 0, pi) q;
reset q;
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
tree := p.Program()
fmt.Println(tree.ToStringTree(nil, p))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Visit(tree); err != nil {
fmt.Println(err)
}
for _, s := range qsim.State() {
fmt.Println(s)
}
Output: (program (statementOrScope (statement (quantumDeclarationStatement (qubitType qubit) q ;))) (statementOrScope (statement (gateCallStatement U ( (expressionList (expression (expression pi) / (expression 2)) , (expression 0) , (expression pi)) ) (gateOperandList (gateOperand (indexedIdentifier q))) ;))) (statementOrScope (statement (resetStatement reset (gateOperand (indexedIdentifier q)) ;))) <EOF>) [0][ 0]( 1.0000 0.0000i): 1.0000
func (*Visitor) VisitReturnSignature ¶
func (v *Visitor) VisitReturnSignature(ctx *parser.ReturnSignatureContext) any
func (*Visitor) VisitReturnStatement ¶
func (v *Visitor) VisitReturnStatement(ctx *parser.ReturnStatementContext) any
func (*Visitor) VisitScalarType ¶
func (v *Visitor) VisitScalarType(ctx *parser.ScalarTypeContext) any
func (*Visitor) VisitScope ¶
func (v *Visitor) VisitScope(ctx *parser.ScopeContext) any
func (*Visitor) VisitSetExpression ¶
func (v *Visitor) VisitSetExpression(ctx *parser.SetExpressionContext) any
func (*Visitor) VisitStatement ¶
func (v *Visitor) VisitStatement(ctx *parser.StatementContext) any
func (*Visitor) VisitStatementOrScope ¶
func (v *Visitor) VisitStatementOrScope(ctx *parser.StatementOrScopeContext) any
func (*Visitor) VisitSwitchCaseItem ¶
func (v *Visitor) VisitSwitchCaseItem(ctx *parser.SwitchCaseItemContext) any
func (*Visitor) VisitSwitchStatement ¶
func (v *Visitor) VisitSwitchStatement(ctx *parser.SwitchStatementContext) any
func (*Visitor) VisitTerminal ¶
func (v *Visitor) VisitTerminal(node antlr.TerminalNode) any
func (*Visitor) VisitUnaryExpression ¶
func (v *Visitor) VisitUnaryExpression(ctx *parser.UnaryExpressionContext) any
func (*Visitor) VisitVersion ¶
func (v *Visitor) VisitVersion(ctx *parser.VersionContext) any
Example ¶
text := `
OPENQASM 3.0;
`
lexer := parser.Newqasm3Lexer(antlr.NewInputStream(text))
p := parser.Newqasm3Parser(antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel))
tree := p.Program()
fmt.Println(tree.ToStringTree(nil, p))
qsim := q.New()
env := visitor.NewEnviron()
v := visitor.New(qsim, env)
if err := v.Visit(tree); err != nil {
fmt.Println(err)
}
fmt.Println(env.Version)
Output: (program (version OPENQASM 3.0 ;) <EOF>) 3.0
func (*Visitor) VisitWhileStatement ¶
func (v *Visitor) VisitWhileStatement(ctx *parser.WhileStatementContext) any
Click to show internal directories.
Click to hide internal directories.