class qasmParser

#include <qasmParser.h>

class qasmParser: public Parser
{
public:
    // enums

    enum
    {
        OPENQASM_KEY = 1,
        INCLUDE_KEY  = 2,
        OPAQUE_KEY   = 3,
        QREG_KEY     = 4,
        CREG_KEY     = 5,
        BARRIER_KEY  = 6,
        IF_KEY       = 7,
        MEASURE_KEY  = 8,
        RESET_KEY    = 9,
        GATE_KEY     = 10,
        PI_KEY       = 11,
        U_GATE_KEY   = 12,
        CX_GATE_KEY  = 13,
        ARROW        = 14,
        EQ           = 15,
        PLUS         = 16,
        MINUS        = 17,
        MUL          = 18,
        DIV          = 19,
        COMMA        = 20,
        SEMI         = 21,
        LPAREN       = 22,
        RPAREN       = 23,
        LBRACKET     = 24,
        RBRACKET     = 25,
        LBRACE       = 26,
        RBRACE       = 27,
        DQM          = 28,
        IDENTIFIER   = 29,
        INTEGER      = 30,
        DECIMAL      = 31,
        FILENAME     = 32,
        REALEXP      = 33,
        NL           = 34,
        WS           = 35,
        LC           = 36,
    };

    enum
    {
        RuleMainprogram  = 0,
        RuleHead_decl    = 1,
        RuleVersion_decl = 2,
        RuleInclude_decl = 3,
        RuleStatement    = 4,
        RuleReg_decl     = 5,
        RuleOpaque_decl  = 6,
        RuleIf_decl      = 7,
        RuleBarrier_decl = 8,
        RuleGate_decl    = 9,
        RuleGoplist      = 10,
        RuleBop          = 11,
        RuleQop          = 12,
        RuleUop          = 13,
        RuleAnylist      = 14,
        RuleIdlist       = 15,
        RuleId_index     = 16,
        RuleArgument     = 17,
        RuleExplist      = 18,
        RuleExp          = 19,
        RuleId           = 20,
        RuleReal         = 21,
        RuleInteger      = 22,
        RuleDecimal      = 23,
        RuleFilename     = 24,
    };

    // structs

    struct Initializer;

    // classes

    class AnylistContext;
    class ArgumentContext;
    class Barrier_declContext;
    class BopContext;
    class DecimalContext;
    class ExpContext;
    class ExplistContext;
    class FilenameContext;
    class Gate_declContext;
    class GoplistContext;
    class Head_declContext;
    class IdContext;
    class Id_indexContext;
    class IdlistContext;
    class If_declContext;
    class Include_declContext;
    class IntegerContext;
    class MainprogramContext;
    class Opaque_declContext;
    class QopContext;
    class RealContext;
    class Reg_declContext;
    class StatementContext;
    class UopContext;
    class Version_declContext;

    // construction

    qasmParser(antlr4::TokenStream* input);

    // methods

    virtual std::string getGrammarFileName() const;
    virtual const antlr4::atn::ATN& getATN() const;
    virtual const std::vector<std::string>& getTokenNames() const;
    virtual const std::vector<std::string>& getRuleNames() const;
    virtual antlr4::dfa::Vocabulary& getVocabulary() const;
    MainprogramContext* mainprogram();
    Head_declContext* head_decl();
    Version_declContext* version_decl();
    Include_declContext* include_decl();
    StatementContext* statement();
    Reg_declContext* reg_decl();
    Opaque_declContext* opaque_decl();
    If_declContext* if_decl();
    Barrier_declContext* barrier_decl();
    Gate_declContext* gate_decl();
    GoplistContext* goplist();
    BopContext* bop();
    QopContext* qop();
    UopContext* uop();
    AnylistContext* anylist();
    IdlistContext* idlist();
    Id_indexContext* id_index();
    ArgumentContext* argument();
    ExplistContext* explist();
    ExpContext* exp();
    ExpContext* exp(int precedence);
    IdContext* id();
    RealContext* real();
    IntegerContext* integer();
    DecimalContext* decimal();
    FilenameContext* filename();

    virtual bool sempred(
        antlr4::RuleContext* _localctx,
        size_t ruleIndex,
        size_t predicateIndex
        );

    bool expSempred(
        ExpContext* _localctx,
        size_t predicateIndex
        );
};