# Generated from .\abc.g4 by ANTLR 4.7.1
from antlr4 import *
from io import StringIO
from typing.io import TextIO
import sys


def serializedATN():
    with StringIO() as buf:
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\16")
        buf.write("\u00c6\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7")
        buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r")
        buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23")
        buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30")
        buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36")
        buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%")
        buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\3\2\3\2\3\3\3\3\3\4\3\4\3\5")
        buf.write("\3\5\3\6\3\6\3\7\3\7\3\7\3\7\5\7b\n\7\3\b\6\be\n\b\r\b")
        buf.write("\16\bf\3\t\6\tj\n\t\r\t\16\tk\3\n\3\n\7\np\n\n\f\n\16")
        buf.write("\ns\13\n\3\n\3\n\3\13\3\13\3\13\7\13z\n\13\f\13\16\13")
        buf.write("}\13\13\3\13\3\13\3\f\5\f\u0082\n\f\3\f\3\f\3\f\3\f\3")
        buf.write("\r\6\r\u0089\n\r\r\r\16\r\u008a\3\r\3\r\3\16\3\16\3\17")
        buf.write("\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24")
        buf.write("\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32")
        buf.write("\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37")
        buf.write("\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3")
        buf.write("(\3(\3)\3)\2\2*\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23")
        buf.write("\13\25\f\27\r\31\16\33\2\35\2\37\2!\2#\2%\2\'\2)\2+\2")
        buf.write("-\2/\2\61\2\63\2\65\2\67\29\2;\2=\2?\2A\2C\2E\2G\2I\2")
        buf.write("K\2M\2O\2Q\2\3\2 \4\2\f\f\17\17\4\2\13\13\"\"\3\2C\\\4")
        buf.write("\2CCcc\4\2DDdd\4\2EEee\4\2FFff\4\2GGgg\4\2HHhh\4\2IIi")
        buf.write("i\4\2JJjj\4\2KKkk\4\2LLll\4\2MMmm\4\2NNnn\4\2OOoo\4\2")
        buf.write("PPpp\4\2QQqq\4\2RRrr\4\2SSss\4\2TTtt\4\2UUuu\4\2VVvv\4")
        buf.write("\2WWww\4\2XXxx\4\2YYyy\4\2ZZzz\4\2[[{{\4\2\\\\||\3\2\62")
        buf.write(";\2\u00b2\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2")
        buf.write("\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2")
        buf.write("\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2")
        buf.write("\3S\3\2\2\2\5U\3\2\2\2\7W\3\2\2\2\tY\3\2\2\2\13[\3\2\2")
        buf.write("\2\ra\3\2\2\2\17d\3\2\2\2\21i\3\2\2\2\23m\3\2\2\2\25v")
        buf.write("\3\2\2\2\27\u0081\3\2\2\2\31\u0088\3\2\2\2\33\u008e\3")
        buf.write("\2\2\2\35\u0090\3\2\2\2\37\u0092\3\2\2\2!\u0094\3\2\2")
        buf.write("\2#\u0096\3\2\2\2%\u0098\3\2\2\2\'\u009a\3\2\2\2)\u009c")
        buf.write("\3\2\2\2+\u009e\3\2\2\2-\u00a0\3\2\2\2/\u00a2\3\2\2\2")
        buf.write("\61\u00a4\3\2\2\2\63\u00a6\3\2\2\2\65\u00a8\3\2\2\2\67")
        buf.write("\u00aa\3\2\2\29\u00ac\3\2\2\2;\u00ae\3\2\2\2=\u00b0\3")
        buf.write("\2\2\2?\u00b2\3\2\2\2A\u00b4\3\2\2\2C\u00b6\3\2\2\2E\u00b8")
        buf.write("\3\2\2\2G\u00ba\3\2\2\2I\u00bc\3\2\2\2K\u00be\3\2\2\2")
        buf.write("M\u00c0\3\2\2\2O\u00c2\3\2\2\2Q\u00c4\3\2\2\2ST\7-\2\2")
        buf.write("T\4\3\2\2\2UV\7,\2\2V\6\3\2\2\2WX\7/\2\2X\b\3\2\2\2YZ")
        buf.write("\7\61\2\2Z\n\3\2\2\2[\\\7%\2\2\\\f\3\2\2\2]b\5\3\2\2^")
        buf.write("b\5\7\4\2_b\5\5\3\2`b\5\t\5\2a]\3\2\2\2a^\3\2\2\2a_\3")
        buf.write("\2\2\2a`\3\2\2\2b\16\3\2\2\2ce\5Q)\2dc\3\2\2\2ef\3\2\2")
        buf.write("\2fd\3\2\2\2fg\3\2\2\2g\20\3\2\2\2hj\5\33\16\2ih\3\2\2")
        buf.write("\2jk\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\22\3\2\2\2mq\5\13\6")
        buf.write("\2np\n\2\2\2on\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2r")
        buf.write("t\3\2\2\2sq\3\2\2\2tu\b\n\2\2u\24\3\2\2\2vw\5\t\5\2w{")
        buf.write("\5\t\5\2xz\n\2\2\2yx\3\2\2\2z}\3\2\2\2{y\3\2\2\2{|\3\2")
        buf.write("\2\2|~\3\2\2\2}{\3\2\2\2~\177\b\13\2\2\177\26\3\2\2\2")
        buf.write("\u0080\u0082\7\17\2\2\u0081\u0080\3\2\2\2\u0081\u0082")
        buf.write("\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\7\f\2\2\u0084")
        buf.write("\u0085\3\2\2\2\u0085\u0086\b\f\3\2\u0086\30\3\2\2\2\u0087")
        buf.write("\u0089\t\3\2\2\u0088\u0087\3\2\2\2\u0089\u008a\3\2\2\2")
        buf.write("\u008a\u0088\3\2\2\2\u008a\u008b\3\2\2\2\u008b\u008c\3")
        buf.write("\2\2\2\u008c\u008d\b\r\3\2\u008d\32\3\2\2\2\u008e\u008f")
        buf.write("\t\4\2\2\u008f\34\3\2\2\2\u0090\u0091\t\5\2\2\u0091\36")
        buf.write("\3\2\2\2\u0092\u0093\t\6\2\2\u0093 \3\2\2\2\u0094\u0095")
        buf.write("\t\7\2\2\u0095\"\3\2\2\2\u0096\u0097\t\b\2\2\u0097$\3")
        buf.write("\2\2\2\u0098\u0099\t\t\2\2\u0099&\3\2\2\2\u009a\u009b")
        buf.write("\t\n\2\2\u009b(\3\2\2\2\u009c\u009d\t\13\2\2\u009d*\3")
        buf.write("\2\2\2\u009e\u009f\t\f\2\2\u009f,\3\2\2\2\u00a0\u00a1")
        buf.write("\t\r\2\2\u00a1.\3\2\2\2\u00a2\u00a3\t\16\2\2\u00a3\60")
        buf.write("\3\2\2\2\u00a4\u00a5\t\17\2\2\u00a5\62\3\2\2\2\u00a6\u00a7")
        buf.write("\t\20\2\2\u00a7\64\3\2\2\2\u00a8\u00a9\t\21\2\2\u00a9")
        buf.write("\66\3\2\2\2\u00aa\u00ab\t\22\2\2\u00ab8\3\2\2\2\u00ac")
        buf.write("\u00ad\t\23\2\2\u00ad:\3\2\2\2\u00ae\u00af\t\24\2\2\u00af")
        buf.write("<\3\2\2\2\u00b0\u00b1\t\25\2\2\u00b1>\3\2\2\2\u00b2\u00b3")
        buf.write("\t\26\2\2\u00b3@\3\2\2\2\u00b4\u00b5\t\27\2\2\u00b5B\3")
        buf.write("\2\2\2\u00b6\u00b7\t\30\2\2\u00b7D\3\2\2\2\u00b8\u00b9")
        buf.write("\t\31\2\2\u00b9F\3\2\2\2\u00ba\u00bb\t\32\2\2\u00bbH\3")
        buf.write("\2\2\2\u00bc\u00bd\t\33\2\2\u00bdJ\3\2\2\2\u00be\u00bf")
        buf.write("\t\34\2\2\u00bfL\3\2\2\2\u00c0\u00c1\t\35\2\2\u00c1N\3")
        buf.write("\2\2\2\u00c2\u00c3\t\36\2\2\u00c3P\3\2\2\2\u00c4\u00c5")
        buf.write("\t\37\2\2\u00c5R\3\2\2\2\n\2afkq{\u0081\u008a\4\2\3\2")
        buf.write("\b\2\2")
        return buf.getvalue()


class abcLexer(Lexer):

    atn = ATNDeserializer().deserialize(serializedATN())

    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]

    ADD = 1
    MUL = 2
    SUB = 3
    DIV = 4
    POUND = 5
    MATH = 6
    NUM = 7
    WORD = 8
    COMMENT = 9
    CPP_COMMENT = 10
    NEWLINE = 11
    SPACE = 12

    channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]

    modeNames = [ "DEFAULT_MODE" ]

    literalNames = [ "<INVALID>",
            "'+'", "'*'", "'-'", "'/'", "'#'" ]

    symbolicNames = [ "<INVALID>",
            "ADD", "MUL", "SUB", "DIV", "POUND", "MATH", "NUM", "WORD", 
            "COMMENT", "CPP_COMMENT", "NEWLINE", "SPACE" ]

    ruleNames = [ "ADD", "MUL", "SUB", "DIV", "POUND", "MATH", "NUM", "WORD", 
                  "COMMENT", "CPP_COMMENT", "NEWLINE", "SPACE", "LETTER", 
                  "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", 
                  "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", 
                  "W", "X", "Y", "Z", "DIGIT" ]

    grammarFileName = "abc.g4"

    def __init__(self, input=None, output:TextIO = sys.stdout):
        super().__init__(input, output)
        self.checkVersion("4.7.1")
        self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())
        self._actions = None
        self._predicates = None



bdd317689c756d0828694c46791c0174a0932947
<mask token>


class abcLexer(Lexer):
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>
    <mask token>

    def __init__(self, input=None, output: TextIO=sys.stdout):
        super().__init__(input, output)
        self.checkVersion('4.7.1')
        self._interp = LexerATNSimulator(self, self.atn, self.
            decisionsToDFA, PredictionContextCache())
        self._actions = None
        self._predicates = None

<mask token>


class abcLexer(Lexer):
    atn = ATNDeserializer().deserialize(serializedATN())
    decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)]
    ADD = 1
    MUL = 2
    SUB = 3
    DIV = 4
    POUND = 5
    MATH = 6
    NUM = 7
    WORD = 8
    COMMENT = 9
    CPP_COMMENT = 10
    NEWLINE = 11
    SPACE = 12
    channelNames = [u'DEFAULT_TOKEN_CHANNEL', u'HIDDEN']
    modeNames = ['DEFAULT_MODE']
    literalNames = ['<INVALID>', "'+'", "'*'", "'-'", "'/'", "'#'"]
    symbolicNames = ['<INVALID>', 'ADD', 'MUL', 'SUB', 'DIV', 'POUND',
        'MATH', 'NUM', 'WORD', 'COMMENT', 'CPP_COMMENT', 'NEWLINE', 'SPACE']
    ruleNames = ['ADD', 'MUL', 'SUB', 'DIV', 'POUND', 'MATH', 'NUM', 'WORD',
        'COMMENT', 'CPP_COMMENT', 'NEWLINE', 'SPACE', 'LETTER', 'A', 'B',
        'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
        'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'DIGIT']
    grammarFileName = 'abc.g4'

    def __init__(self, input=None, output: TextIO=sys.stdout):
        super().__init__(input, output)
        self.checkVersion('4.7.1')
        self._interp = LexerATNSimulator(self, self.atn, self.
            decisionsToDFA, PredictionContextCache())
        self._actions = None
        self._predicates = None

<mask token>


def serializedATN():
    with StringIO() as buf:
        buf.write('\x03悋Ꜫ脳맭䅼㯧瞆奤\x02\x0e')
        buf.write(
            'Æ\x08\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07'
            )
        buf.write(
            '\t\x07\x04\x08\t\x08\x04\t\t\t\x04\n\t\n\x04\x0b\t\x0b\x04\x0c\t\x0c\x04\r\t\r'
            )
        buf.write(
            '\x04\x0e\t\x0e\x04\x0f\t\x0f\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04\x13'
            )
        buf.write(
            '\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04\x18\t\x18'
            )
        buf.write(
            '\x04\x19\t\x19\x04\x1a\t\x1a\x04\x1b\t\x1b\x04\x1c\t\x1c\x04\x1d\t\x1d\x04\x1e'
            )
        buf.write(
            '\t\x1e\x04\x1f\t\x1f\x04 \t \x04!\t!\x04"\t"\x04#\t#\x04$\t$\x04%\t%'
            )
        buf.write(
            "\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05"
            )
        buf.write(
            '\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07b\n\x07\x03\x08\x06\x08e\n\x08\r\x08'
            )
        buf.write(
            '\x0e\x08f\x03\t\x06\tj\n\t\r\t\x0e\tk\x03\n\x03\n\x07\np\n\n\x0c\n\x0e'
            )
        buf.write(
            '\ns\x0b\n\x03\n\x03\n\x03\x0b\x03\x0b\x03\x0b\x07\x0bz\n\x0b\x0c\x0b\x0e\x0b'
            )
        buf.write("""}
""")
        buf.write(
            '\r\x06\r\x89\n\r\r\r\x0e\r\x8a\x03\r\x03\r\x03\x0e\x03\x0e\x03\x0f'
            )
        buf.write(
            '\x03\x0f\x03\x10\x03\x10\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x14\x03\x14'
            )
        buf.write(
            '\x03\x15\x03\x15\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19\x03\x1a'
            )
        buf.write(
            '\x03\x1a\x03\x1b\x03\x1b\x03\x1c\x03\x1c\x03\x1d\x03\x1d\x03\x1e\x03\x1e\x03\x1f\x03\x1f'
            )
        buf.write(
            '\x03 \x03 \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x03%\x03%\x03&\x03&\x03\'\x03\'\x03'
            )
        buf.write(
            '(\x03(\x03)\x03)\x02\x02*\x03\x03\x05\x04\x07\x05\t\x06\x0b\x07\r\x08\x0f\t\x11\n\x13'
            )
        buf.write(
            "\x0b\x15\x0c\x17\r\x19\x0e\x1b\x02\x1d\x02\x1f\x02!\x02#\x02%\x02'\x02)\x02+\x02"
            )
        buf.write(
            '-\x02/\x021\x023\x025\x027\x029\x02;\x02=\x02?\x02A\x02C\x02E\x02G\x02I\x02'
            )
        buf.write(
            'K\x02M\x02O\x02Q\x02\x03\x02 \x04\x02\x0c\x0c\x0f\x0f\x04\x02\x0b\x0b""\x03\x02C\\\x04'
            )
        buf.write(
            '\x02CCcc\x04\x02DDdd\x04\x02EEee\x04\x02FFff\x04\x02GGgg\x04\x02HHhh\x04\x02IIi'
            )
        buf.write(
            'i\x04\x02JJjj\x04\x02KKkk\x04\x02LLll\x04\x02MMmm\x04\x02NNnn\x04\x02OOoo\x04\x02'
            )
        buf.write(
            'PPpp\x04\x02QQqq\x04\x02RRrr\x04\x02SSss\x04\x02TTtt\x04\x02UUuu\x04\x02VVvv\x04'
            )
        buf.write(
            '\x02WWww\x04\x02XXxx\x04\x02YYyy\x04\x02ZZzz\x04\x02[[{{\x04\x02\\\\||\x03\x022'
            )
        buf.write(
            ';\x02²\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02'
            )
        buf.write(
            '\x02\x02\x02\x0b\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0f\x03\x02\x02\x02\x02\x11\x03\x02\x02'
            )
        buf.write(
            '\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02'
            )
        buf.write(
            '\x03S\x03\x02\x02\x02\x05U\x03\x02\x02\x02\x07W\x03\x02\x02\x02\tY\x03\x02\x02\x02\x0b[\x03\x02\x02'
            )
        buf.write(
            '\x02\ra\x03\x02\x02\x02\x0fd\x03\x02\x02\x02\x11i\x03\x02\x02\x02\x13m\x03\x02\x02\x02\x15v'
            )
        buf.write(
            '\x03\x02\x02\x02\x17\x81\x03\x02\x02\x02\x19\x88\x03\x02\x02\x02\x1b\x8e\x03'
            )
        buf.write(
            '\x02\x02\x02\x1d\x90\x03\x02\x02\x02\x1f\x92\x03\x02\x02\x02!\x94\x03\x02\x02'
            )
        buf.write(
            "\x02#\x96\x03\x02\x02\x02%\x98\x03\x02\x02\x02'\x9a\x03\x02\x02\x02)\x9c"
            )
        buf.write(
            '\x03\x02\x02\x02+\x9e\x03\x02\x02\x02-\xa0\x03\x02\x02\x02/¢\x03\x02\x02\x02'
            )
        buf.write('1¤\x03\x02\x02\x023¦\x03\x02\x02\x025¨\x03\x02\x02\x027')
        buf.write('ª\x03\x02\x02\x029¬\x03\x02\x02\x02;®\x03\x02\x02\x02=°\x03'
            )
        buf.write(
            '\x02\x02\x02?²\x03\x02\x02\x02A´\x03\x02\x02\x02C¶\x03\x02\x02\x02E¸'
            )
        buf.write(
            '\x03\x02\x02\x02Gº\x03\x02\x02\x02I¼\x03\x02\x02\x02K¾\x03\x02\x02\x02'
            )
        buf.write(
            'MÀ\x03\x02\x02\x02OÂ\x03\x02\x02\x02QÄ\x03\x02\x02\x02ST\x07-\x02\x02'
            )
        buf.write(
            'T\x04\x03\x02\x02\x02UV\x07,\x02\x02V\x06\x03\x02\x02\x02WX\x07/\x02\x02X\x08\x03\x02\x02\x02YZ'
            )
        buf.write("""1Z
[\\%\\]b^""")
        buf.write(
            'b\x05\x07\x04\x02_b\x05\x05\x03\x02`b\x05\t\x05\x02a]\x03\x02\x02\x02a^\x03\x02\x02\x02a_\x03'
            )
        buf.write(
            '\x02\x02\x02a`\x03\x02\x02\x02b\x0e\x03\x02\x02\x02ce\x05Q)\x02dc\x03\x02\x02\x02ef\x03\x02\x02'
            )
        buf.write(
            '\x02fd\x03\x02\x02\x02fg\x03\x02\x02\x02g\x10\x03\x02\x02\x02hj\x05\x1b\x0e\x02ih\x03\x02\x02'
            )
        buf.write(
            '\x02jk\x03\x02\x02\x02ki\x03\x02\x02\x02kl\x03\x02\x02\x02l\x12\x03\x02\x02\x02mq\x05\x0b\x06'
            )
        buf.write("""np
onpsqoqrr""")
        buf.write("""tsqtu
uvw	w{""")
        buf.write("""	xz
yxz}{y{|""")
        buf.write(
            '\x02\x02|~\x03\x02\x02\x02}{\x03\x02\x02\x02~\x7f\x08\x0b\x02\x02\x7f\x16\x03\x02\x02\x02'
            )
        buf.write('\x80\x82\x07\x0f\x02\x02\x81\x80\x03\x02\x02\x02\x81\x82')
        buf.write(
            '\x03\x02\x02\x02\x82\x83\x03\x02\x02\x02\x83\x84\x07\x0c\x02\x02\x84'
            )
        buf.write(
            '\x85\x03\x02\x02\x02\x85\x86\x08\x0c\x03\x02\x86\x18\x03\x02\x02\x02\x87'
            )
        buf.write(
            '\x89\t\x03\x02\x02\x88\x87\x03\x02\x02\x02\x89\x8a\x03\x02\x02\x02'
            )
        buf.write(
            '\x8a\x88\x03\x02\x02\x02\x8a\x8b\x03\x02\x02\x02\x8b\x8c\x03')
        buf.write(
            '\x02\x02\x02\x8c\x8d\x08\r\x03\x02\x8d\x1a\x03\x02\x02\x02\x8e\x8f'
            )
        buf.write(
            '\t\x04\x02\x02\x8f\x1c\x03\x02\x02\x02\x90\x91\t\x05\x02\x02\x91\x1e'
            )
        buf.write(
            '\x03\x02\x02\x02\x92\x93\t\x06\x02\x02\x93 \x03\x02\x02\x02\x94\x95'
            )
        buf.write(
            '\t\x07\x02\x02\x95"\x03\x02\x02\x02\x96\x97\t\x08\x02\x02\x97$\x03'
            )
        buf.write(
            '\x02\x02\x02\x98\x99\t\t\x02\x02\x99&\x03\x02\x02\x02\x9a\x9b')
        buf.write(
            '\t\n\x02\x02\x9b(\x03\x02\x02\x02\x9c\x9d\t\x0b\x02\x02\x9d*\x03')
        buf.write(
            '\x02\x02\x02\x9e\x9f\t\x0c\x02\x02\x9f,\x03\x02\x02\x02\xa0¡')
        buf.write('\t\r\x02\x02¡.\x03\x02\x02\x02¢£\t\x0e\x02\x02£0')
        buf.write('\x03\x02\x02\x02¤¥\t\x0f\x02\x02¥2\x03\x02\x02\x02¦§')
        buf.write('\t\x10\x02\x02§4\x03\x02\x02\x02¨©\t\x11\x02\x02©')
        buf.write('6\x03\x02\x02\x02ª«\t\x12\x02\x02«8\x03\x02\x02\x02¬')
        buf.write('\xad\t\x13\x02\x02\xad:\x03\x02\x02\x02®¯\t\x14\x02\x02¯')
        buf.write('<\x03\x02\x02\x02°±\t\x15\x02\x02±>\x03\x02\x02\x02²³')
        buf.write('\t\x16\x02\x02³@\x03\x02\x02\x02´µ\t\x17\x02\x02µB\x03')
        buf.write('\x02\x02\x02¶·\t\x18\x02\x02·D\x03\x02\x02\x02¸¹')
        buf.write('\t\x19\x02\x02¹F\x03\x02\x02\x02º»\t\x1a\x02\x02»H\x03')
        buf.write('\x02\x02\x02¼½\t\x1b\x02\x02½J\x03\x02\x02\x02¾¿')
        buf.write('\t\x1c\x02\x02¿L\x03\x02\x02\x02ÀÁ\t\x1d\x02\x02ÁN\x03')
        buf.write('\x02\x02\x02ÂÃ\t\x1e\x02\x02ÃP\x03\x02\x02\x02ÄÅ')
        buf.write(
            '\t\x1f\x02\x02ÅR\x03\x02\x02\x02\n\x02afkq{\x81\x8a\x04\x02\x03\x02'
            )
        buf.write('\x08\x02\x02')
        return buf.getvalue()


class abcLexer(Lexer):
    atn = ATNDeserializer().deserialize(serializedATN())
    decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)]
    ADD = 1
    MUL = 2
    SUB = 3
    DIV = 4
    POUND = 5
    MATH = 6
    NUM = 7
    WORD = 8
    COMMENT = 9
    CPP_COMMENT = 10
    NEWLINE = 11
    SPACE = 12
    channelNames = [u'DEFAULT_TOKEN_CHANNEL', u'HIDDEN']
    modeNames = ['DEFAULT_MODE']
    literalNames = ['<INVALID>', "'+'", "'*'", "'-'", "'/'", "'#'"]
    symbolicNames = ['<INVALID>', 'ADD', 'MUL', 'SUB', 'DIV', 'POUND',
        'MATH', 'NUM', 'WORD', 'COMMENT', 'CPP_COMMENT', 'NEWLINE', 'SPACE']
    ruleNames = ['ADD', 'MUL', 'SUB', 'DIV', 'POUND', 'MATH', 'NUM', 'WORD',
        'COMMENT', 'CPP_COMMENT', 'NEWLINE', 'SPACE', 'LETTER', 'A', 'B',
        'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
        'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'DIGIT']
    grammarFileName = 'abc.g4'

    def __init__(self, input=None, output: TextIO=sys.stdout):
        super().__init__(input, output)
        self.checkVersion('4.7.1')
        self._interp = LexerATNSimulator(self, self.atn, self.
            decisionsToDFA, PredictionContextCache())
        self._actions = None
        self._predicates = None

from antlr4 import *
from io import StringIO
from typing.io import TextIO
import sys


def serializedATN():
    with StringIO() as buf:
        buf.write('\x03悋Ꜫ脳맭䅼㯧瞆奤\x02\x0e')
        buf.write(
            'Æ\x08\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07'
            )
        buf.write(
            '\t\x07\x04\x08\t\x08\x04\t\t\t\x04\n\t\n\x04\x0b\t\x0b\x04\x0c\t\x0c\x04\r\t\r'
            )
        buf.write(
            '\x04\x0e\t\x0e\x04\x0f\t\x0f\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04\x13'
            )
        buf.write(
            '\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04\x18\t\x18'
            )
        buf.write(
            '\x04\x19\t\x19\x04\x1a\t\x1a\x04\x1b\t\x1b\x04\x1c\t\x1c\x04\x1d\t\x1d\x04\x1e'
            )
        buf.write(
            '\t\x1e\x04\x1f\t\x1f\x04 \t \x04!\t!\x04"\t"\x04#\t#\x04$\t$\x04%\t%'
            )
        buf.write(
            "\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05"
            )
        buf.write(
            '\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07b\n\x07\x03\x08\x06\x08e\n\x08\r\x08'
            )
        buf.write(
            '\x0e\x08f\x03\t\x06\tj\n\t\r\t\x0e\tk\x03\n\x03\n\x07\np\n\n\x0c\n\x0e'
            )
        buf.write(
            '\ns\x0b\n\x03\n\x03\n\x03\x0b\x03\x0b\x03\x0b\x07\x0bz\n\x0b\x0c\x0b\x0e\x0b'
            )
        buf.write("""}
""")
        buf.write(
            '\r\x06\r\x89\n\r\r\r\x0e\r\x8a\x03\r\x03\r\x03\x0e\x03\x0e\x03\x0f'
            )
        buf.write(
            '\x03\x0f\x03\x10\x03\x10\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x14\x03\x14'
            )
        buf.write(
            '\x03\x15\x03\x15\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18\x03\x18\x03\x19\x03\x19\x03\x1a'
            )
        buf.write(
            '\x03\x1a\x03\x1b\x03\x1b\x03\x1c\x03\x1c\x03\x1d\x03\x1d\x03\x1e\x03\x1e\x03\x1f\x03\x1f'
            )
        buf.write(
            '\x03 \x03 \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x03%\x03%\x03&\x03&\x03\'\x03\'\x03'
            )
        buf.write(
            '(\x03(\x03)\x03)\x02\x02*\x03\x03\x05\x04\x07\x05\t\x06\x0b\x07\r\x08\x0f\t\x11\n\x13'
            )
        buf.write(
            "\x0b\x15\x0c\x17\r\x19\x0e\x1b\x02\x1d\x02\x1f\x02!\x02#\x02%\x02'\x02)\x02+\x02"
            )
        buf.write(
            '-\x02/\x021\x023\x025\x027\x029\x02;\x02=\x02?\x02A\x02C\x02E\x02G\x02I\x02'
            )
        buf.write(
            'K\x02M\x02O\x02Q\x02\x03\x02 \x04\x02\x0c\x0c\x0f\x0f\x04\x02\x0b\x0b""\x03\x02C\\\x04'
            )
        buf.write(
            '\x02CCcc\x04\x02DDdd\x04\x02EEee\x04\x02FFff\x04\x02GGgg\x04\x02HHhh\x04\x02IIi'
            )
        buf.write(
            'i\x04\x02JJjj\x04\x02KKkk\x04\x02LLll\x04\x02MMmm\x04\x02NNnn\x04\x02OOoo\x04\x02'
            )
        buf.write(
            'PPpp\x04\x02QQqq\x04\x02RRrr\x04\x02SSss\x04\x02TTtt\x04\x02UUuu\x04\x02VVvv\x04'
            )
        buf.write(
            '\x02WWww\x04\x02XXxx\x04\x02YYyy\x04\x02ZZzz\x04\x02[[{{\x04\x02\\\\||\x03\x022'
            )
        buf.write(
            ';\x02²\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02'
            )
        buf.write(
            '\x02\x02\x02\x0b\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0f\x03\x02\x02\x02\x02\x11\x03\x02\x02'
            )
        buf.write(
            '\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02'
            )
        buf.write(
            '\x03S\x03\x02\x02\x02\x05U\x03\x02\x02\x02\x07W\x03\x02\x02\x02\tY\x03\x02\x02\x02\x0b[\x03\x02\x02'
            )
        buf.write(
            '\x02\ra\x03\x02\x02\x02\x0fd\x03\x02\x02\x02\x11i\x03\x02\x02\x02\x13m\x03\x02\x02\x02\x15v'
            )
        buf.write(
            '\x03\x02\x02\x02\x17\x81\x03\x02\x02\x02\x19\x88\x03\x02\x02\x02\x1b\x8e\x03'
            )
        buf.write(
            '\x02\x02\x02\x1d\x90\x03\x02\x02\x02\x1f\x92\x03\x02\x02\x02!\x94\x03\x02\x02'
            )
        buf.write(
            "\x02#\x96\x03\x02\x02\x02%\x98\x03\x02\x02\x02'\x9a\x03\x02\x02\x02)\x9c"
            )
        buf.write(
            '\x03\x02\x02\x02+\x9e\x03\x02\x02\x02-\xa0\x03\x02\x02\x02/¢\x03\x02\x02\x02'
            )
        buf.write('1¤\x03\x02\x02\x023¦\x03\x02\x02\x025¨\x03\x02\x02\x027')
        buf.write('ª\x03\x02\x02\x029¬\x03\x02\x02\x02;®\x03\x02\x02\x02=°\x03'
            )
        buf.write(
            '\x02\x02\x02?²\x03\x02\x02\x02A´\x03\x02\x02\x02C¶\x03\x02\x02\x02E¸'
            )
        buf.write(
            '\x03\x02\x02\x02Gº\x03\x02\x02\x02I¼\x03\x02\x02\x02K¾\x03\x02\x02\x02'
            )
        buf.write(
            'MÀ\x03\x02\x02\x02OÂ\x03\x02\x02\x02QÄ\x03\x02\x02\x02ST\x07-\x02\x02'
            )
        buf.write(
            'T\x04\x03\x02\x02\x02UV\x07,\x02\x02V\x06\x03\x02\x02\x02WX\x07/\x02\x02X\x08\x03\x02\x02\x02YZ'
            )
        buf.write("""1Z
[\\%\\]b^""")
        buf.write(
            'b\x05\x07\x04\x02_b\x05\x05\x03\x02`b\x05\t\x05\x02a]\x03\x02\x02\x02a^\x03\x02\x02\x02a_\x03'
            )
        buf.write(
            '\x02\x02\x02a`\x03\x02\x02\x02b\x0e\x03\x02\x02\x02ce\x05Q)\x02dc\x03\x02\x02\x02ef\x03\x02\x02'
            )
        buf.write(
            '\x02fd\x03\x02\x02\x02fg\x03\x02\x02\x02g\x10\x03\x02\x02\x02hj\x05\x1b\x0e\x02ih\x03\x02\x02'
            )
        buf.write(
            '\x02jk\x03\x02\x02\x02ki\x03\x02\x02\x02kl\x03\x02\x02\x02l\x12\x03\x02\x02\x02mq\x05\x0b\x06'
            )
        buf.write("""np
onpsqoqrr""")
        buf.write("""tsqtu
uvw	w{""")
        buf.write("""	xz
yxz}{y{|""")
        buf.write(
            '\x02\x02|~\x03\x02\x02\x02}{\x03\x02\x02\x02~\x7f\x08\x0b\x02\x02\x7f\x16\x03\x02\x02\x02'
            )
        buf.write('\x80\x82\x07\x0f\x02\x02\x81\x80\x03\x02\x02\x02\x81\x82')
        buf.write(
            '\x03\x02\x02\x02\x82\x83\x03\x02\x02\x02\x83\x84\x07\x0c\x02\x02\x84'
            )
        buf.write(
            '\x85\x03\x02\x02\x02\x85\x86\x08\x0c\x03\x02\x86\x18\x03\x02\x02\x02\x87'
            )
        buf.write(
            '\x89\t\x03\x02\x02\x88\x87\x03\x02\x02\x02\x89\x8a\x03\x02\x02\x02'
            )
        buf.write(
            '\x8a\x88\x03\x02\x02\x02\x8a\x8b\x03\x02\x02\x02\x8b\x8c\x03')
        buf.write(
            '\x02\x02\x02\x8c\x8d\x08\r\x03\x02\x8d\x1a\x03\x02\x02\x02\x8e\x8f'
            )
        buf.write(
            '\t\x04\x02\x02\x8f\x1c\x03\x02\x02\x02\x90\x91\t\x05\x02\x02\x91\x1e'
            )
        buf.write(
            '\x03\x02\x02\x02\x92\x93\t\x06\x02\x02\x93 \x03\x02\x02\x02\x94\x95'
            )
        buf.write(
            '\t\x07\x02\x02\x95"\x03\x02\x02\x02\x96\x97\t\x08\x02\x02\x97$\x03'
            )
        buf.write(
            '\x02\x02\x02\x98\x99\t\t\x02\x02\x99&\x03\x02\x02\x02\x9a\x9b')
        buf.write(
            '\t\n\x02\x02\x9b(\x03\x02\x02\x02\x9c\x9d\t\x0b\x02\x02\x9d*\x03')
        buf.write(
            '\x02\x02\x02\x9e\x9f\t\x0c\x02\x02\x9f,\x03\x02\x02\x02\xa0¡')
        buf.write('\t\r\x02\x02¡.\x03\x02\x02\x02¢£\t\x0e\x02\x02£0')
        buf.write('\x03\x02\x02\x02¤¥\t\x0f\x02\x02¥2\x03\x02\x02\x02¦§')
        buf.write('\t\x10\x02\x02§4\x03\x02\x02\x02¨©\t\x11\x02\x02©')
        buf.write('6\x03\x02\x02\x02ª«\t\x12\x02\x02«8\x03\x02\x02\x02¬')
        buf.write('\xad\t\x13\x02\x02\xad:\x03\x02\x02\x02®¯\t\x14\x02\x02¯')
        buf.write('<\x03\x02\x02\x02°±\t\x15\x02\x02±>\x03\x02\x02\x02²³')
        buf.write('\t\x16\x02\x02³@\x03\x02\x02\x02´µ\t\x17\x02\x02µB\x03')
        buf.write('\x02\x02\x02¶·\t\x18\x02\x02·D\x03\x02\x02\x02¸¹')
        buf.write('\t\x19\x02\x02¹F\x03\x02\x02\x02º»\t\x1a\x02\x02»H\x03')
        buf.write('\x02\x02\x02¼½\t\x1b\x02\x02½J\x03\x02\x02\x02¾¿')
        buf.write('\t\x1c\x02\x02¿L\x03\x02\x02\x02ÀÁ\t\x1d\x02\x02ÁN\x03')
        buf.write('\x02\x02\x02ÂÃ\t\x1e\x02\x02ÃP\x03\x02\x02\x02ÄÅ')
        buf.write(
            '\t\x1f\x02\x02ÅR\x03\x02\x02\x02\n\x02afkq{\x81\x8a\x04\x02\x03\x02'
            )
        buf.write('\x08\x02\x02')
        return buf.getvalue()


class abcLexer(Lexer):
    atn = ATNDeserializer().deserialize(serializedATN())
    decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)]
    ADD = 1
    MUL = 2
    SUB = 3
    DIV = 4
    POUND = 5
    MATH = 6
    NUM = 7
    WORD = 8
    COMMENT = 9
    CPP_COMMENT = 10
    NEWLINE = 11
    SPACE = 12
    channelNames = [u'DEFAULT_TOKEN_CHANNEL', u'HIDDEN']
    modeNames = ['DEFAULT_MODE']
    literalNames = ['<INVALID>', "'+'", "'*'", "'-'", "'/'", "'#'"]
    symbolicNames = ['<INVALID>', 'ADD', 'MUL', 'SUB', 'DIV', 'POUND',
        'MATH', 'NUM', 'WORD', 'COMMENT', 'CPP_COMMENT', 'NEWLINE', 'SPACE']
    ruleNames = ['ADD', 'MUL', 'SUB', 'DIV', 'POUND', 'MATH', 'NUM', 'WORD',
        'COMMENT', 'CPP_COMMENT', 'NEWLINE', 'SPACE', 'LETTER', 'A', 'B',
        'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
        'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'DIGIT']
    grammarFileName = 'abc.g4'

    def __init__(self, input=None, output: TextIO=sys.stdout):
        super().__init__(input, output)
        self.checkVersion('4.7.1')
        self._interp = LexerATNSimulator(self, self.atn, self.
            decisionsToDFA, PredictionContextCache())
        self._actions = None
        self._predicates = None

# Generated from .\abc.g4 by ANTLR 4.7.1
from antlr4 import *
from io import StringIO
from typing.io import TextIO
import sys


def serializedATN():
    with StringIO() as buf:
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\16")
        buf.write("\u00c6\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7")
        buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r")
        buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23")
        buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30")
        buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36")
        buf.write("\t\36\4\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%")
        buf.write("\4&\t&\4\'\t\'\4(\t(\4)\t)\3\2\3\2\3\3\3\3\3\4\3\4\3\5")
        buf.write("\3\5\3\6\3\6\3\7\3\7\3\7\3\7\5\7b\n\7\3\b\6\be\n\b\r\b")
        buf.write("\16\bf\3\t\6\tj\n\t\r\t\16\tk\3\n\3\n\7\np\n\n\f\n\16")
        buf.write("\ns\13\n\3\n\3\n\3\13\3\13\3\13\7\13z\n\13\f\13\16\13")
        buf.write("}\13\13\3\13\3\13\3\f\5\f\u0082\n\f\3\f\3\f\3\f\3\f\3")
        buf.write("\r\6\r\u0089\n\r\r\r\16\r\u008a\3\r\3\r\3\16\3\16\3\17")
        buf.write("\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24")
        buf.write("\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32")
        buf.write("\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37")
        buf.write("\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3")
        buf.write("(\3(\3)\3)\2\2*\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23")
        buf.write("\13\25\f\27\r\31\16\33\2\35\2\37\2!\2#\2%\2\'\2)\2+\2")
        buf.write("-\2/\2\61\2\63\2\65\2\67\29\2;\2=\2?\2A\2C\2E\2G\2I\2")
        buf.write("K\2M\2O\2Q\2\3\2 \4\2\f\f\17\17\4\2\13\13\"\"\3\2C\\\4")
        buf.write("\2CCcc\4\2DDdd\4\2EEee\4\2FFff\4\2GGgg\4\2HHhh\4\2IIi")
        buf.write("i\4\2JJjj\4\2KKkk\4\2LLll\4\2MMmm\4\2NNnn\4\2OOoo\4\2")
        buf.write("PPpp\4\2QQqq\4\2RRrr\4\2SSss\4\2TTtt\4\2UUuu\4\2VVvv\4")
        buf.write("\2WWww\4\2XXxx\4\2YYyy\4\2ZZzz\4\2[[{{\4\2\\\\||\3\2\62")
        buf.write(";\2\u00b2\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2")
        buf.write("\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2")
        buf.write("\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2")
        buf.write("\3S\3\2\2\2\5U\3\2\2\2\7W\3\2\2\2\tY\3\2\2\2\13[\3\2\2")
        buf.write("\2\ra\3\2\2\2\17d\3\2\2\2\21i\3\2\2\2\23m\3\2\2\2\25v")
        buf.write("\3\2\2\2\27\u0081\3\2\2\2\31\u0088\3\2\2\2\33\u008e\3")
        buf.write("\2\2\2\35\u0090\3\2\2\2\37\u0092\3\2\2\2!\u0094\3\2\2")
        buf.write("\2#\u0096\3\2\2\2%\u0098\3\2\2\2\'\u009a\3\2\2\2)\u009c")
        buf.write("\3\2\2\2+\u009e\3\2\2\2-\u00a0\3\2\2\2/\u00a2\3\2\2\2")
        buf.write("\61\u00a4\3\2\2\2\63\u00a6\3\2\2\2\65\u00a8\3\2\2\2\67")
        buf.write("\u00aa\3\2\2\29\u00ac\3\2\2\2;\u00ae\3\2\2\2=\u00b0\3")
        buf.write("\2\2\2?\u00b2\3\2\2\2A\u00b4\3\2\2\2C\u00b6\3\2\2\2E\u00b8")
        buf.write("\3\2\2\2G\u00ba\3\2\2\2I\u00bc\3\2\2\2K\u00be\3\2\2\2")
        buf.write("M\u00c0\3\2\2\2O\u00c2\3\2\2\2Q\u00c4\3\2\2\2ST\7-\2\2")
        buf.write("T\4\3\2\2\2UV\7,\2\2V\6\3\2\2\2WX\7/\2\2X\b\3\2\2\2YZ")
        buf.write("\7\61\2\2Z\n\3\2\2\2[\\\7%\2\2\\\f\3\2\2\2]b\5\3\2\2^")
        buf.write("b\5\7\4\2_b\5\5\3\2`b\5\t\5\2a]\3\2\2\2a^\3\2\2\2a_\3")
        buf.write("\2\2\2a`\3\2\2\2b\16\3\2\2\2ce\5Q)\2dc\3\2\2\2ef\3\2\2")
        buf.write("\2fd\3\2\2\2fg\3\2\2\2g\20\3\2\2\2hj\5\33\16\2ih\3\2\2")
        buf.write("\2jk\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\22\3\2\2\2mq\5\13\6")
        buf.write("\2np\n\2\2\2on\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2r")
        buf.write("t\3\2\2\2sq\3\2\2\2tu\b\n\2\2u\24\3\2\2\2vw\5\t\5\2w{")
        buf.write("\5\t\5\2xz\n\2\2\2yx\3\2\2\2z}\3\2\2\2{y\3\2\2\2{|\3\2")
        buf.write("\2\2|~\3\2\2\2}{\3\2\2\2~\177\b\13\2\2\177\26\3\2\2\2")
        buf.write("\u0080\u0082\7\17\2\2\u0081\u0080\3\2\2\2\u0081\u0082")
        buf.write("\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\7\f\2\2\u0084")
        buf.write("\u0085\3\2\2\2\u0085\u0086\b\f\3\2\u0086\30\3\2\2\2\u0087")
        buf.write("\u0089\t\3\2\2\u0088\u0087\3\2\2\2\u0089\u008a\3\2\2\2")
        buf.write("\u008a\u0088\3\2\2\2\u008a\u008b\3\2\2\2\u008b\u008c\3")
        buf.write("\2\2\2\u008c\u008d\b\r\3\2\u008d\32\3\2\2\2\u008e\u008f")
        buf.write("\t\4\2\2\u008f\34\3\2\2\2\u0090\u0091\t\5\2\2\u0091\36")
        buf.write("\3\2\2\2\u0092\u0093\t\6\2\2\u0093 \3\2\2\2\u0094\u0095")
        buf.write("\t\7\2\2\u0095\"\3\2\2\2\u0096\u0097\t\b\2\2\u0097$\3")
        buf.write("\2\2\2\u0098\u0099\t\t\2\2\u0099&\3\2\2\2\u009a\u009b")
        buf.write("\t\n\2\2\u009b(\3\2\2\2\u009c\u009d\t\13\2\2\u009d*\3")
        buf.write("\2\2\2\u009e\u009f\t\f\2\2\u009f,\3\2\2\2\u00a0\u00a1")
        buf.write("\t\r\2\2\u00a1.\3\2\2\2\u00a2\u00a3\t\16\2\2\u00a3\60")
        buf.write("\3\2\2\2\u00a4\u00a5\t\17\2\2\u00a5\62\3\2\2\2\u00a6\u00a7")
        buf.write("\t\20\2\2\u00a7\64\3\2\2\2\u00a8\u00a9\t\21\2\2\u00a9")
        buf.write("\66\3\2\2\2\u00aa\u00ab\t\22\2\2\u00ab8\3\2\2\2\u00ac")
        buf.write("\u00ad\t\23\2\2\u00ad:\3\2\2\2\u00ae\u00af\t\24\2\2\u00af")
        buf.write("<\3\2\2\2\u00b0\u00b1\t\25\2\2\u00b1>\3\2\2\2\u00b2\u00b3")
        buf.write("\t\26\2\2\u00b3@\3\2\2\2\u00b4\u00b5\t\27\2\2\u00b5B\3")
        buf.write("\2\2\2\u00b6\u00b7\t\30\2\2\u00b7D\3\2\2\2\u00b8\u00b9")
        buf.write("\t\31\2\2\u00b9F\3\2\2\2\u00ba\u00bb\t\32\2\2\u00bbH\3")
        buf.write("\2\2\2\u00bc\u00bd\t\33\2\2\u00bdJ\3\2\2\2\u00be\u00bf")
        buf.write("\t\34\2\2\u00bfL\3\2\2\2\u00c0\u00c1\t\35\2\2\u00c1N\3")
        buf.write("\2\2\2\u00c2\u00c3\t\36\2\2\u00c3P\3\2\2\2\u00c4\u00c5")
        buf.write("\t\37\2\2\u00c5R\3\2\2\2\n\2afkq{\u0081\u008a\4\2\3\2")
        buf.write("\b\2\2")
        return buf.getvalue()


class abcLexer(Lexer):

    atn = ATNDeserializer().deserialize(serializedATN())

    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]

    ADD = 1
    MUL = 2
    SUB = 3
    DIV = 4
    POUND = 5
    MATH = 6
    NUM = 7
    WORD = 8
    COMMENT = 9
    CPP_COMMENT = 10
    NEWLINE = 11
    SPACE = 12

    channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]

    modeNames = [ "DEFAULT_MODE" ]

    literalNames = [ "<INVALID>",
            "'+'", "'*'", "'-'", "'/'", "'#'" ]

    symbolicNames = [ "<INVALID>",
            "ADD", "MUL", "SUB", "DIV", "POUND", "MATH", "NUM", "WORD", 
            "COMMENT", "CPP_COMMENT", "NEWLINE", "SPACE" ]

    ruleNames = [ "ADD", "MUL", "SUB", "DIV", "POUND", "MATH", "NUM", "WORD", 
                  "COMMENT", "CPP_COMMENT", "NEWLINE", "SPACE", "LETTER", 
                  "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", 
                  "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", 
                  "W", "X", "Y", "Z", "DIGIT" ]

    grammarFileName = "abc.g4"

    def __init__(self, input=None, output:TextIO = sys.stdout):
        super().__init__(input, output)
        self.checkVersion("4.7.1")
        self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())
        self._actions = None
        self._predicates = None


