Commit e71ba9bd authored by Kateřina Sloupová's avatar Kateřina Sloupová
Browse files

EFA removed, DFA and NFA divided, fja_checker prepared for regex related homework

parent bbf32586
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -6,7 +6,7 @@ start: init production* final;


init:        (INIT EQUALS statename | );
init:        (INIT EQUALS statename | );


production:  LEFT_PARENTHESIS statename COMMA statename RIGHT_PARENTHESIS EQUALS stateset;
production:  LEFT_PARENTHESIS statename COMMA (statename | EPSILON) RIGHT_PARENTHESIS EQUALS stateset;


stateset:    LEFT_BRACKET (statename (COMMA statename)* | ) RIGHT_BRACKET;
stateset:    LEFT_BRACKET (statename (COMMA statename)* | ) RIGHT_BRACKET;


@@ -26,6 +26,7 @@ LEFT_BRACKET : '{';
RIGHT_BRACKET     : '}';
RIGHT_BRACKET     : '}';
COMMA             : ',';
COMMA             : ',';
FINAL             : ('final');
FINAL             : ('final');
EPSILON           : ('ε' | '\\''e');
STATE             : [a-zA-Z0-9]+;
STATE             : [a-zA-Z0-9]+;


/* Characters to be ignored */
/* Characters to be ignored */
+29 −26
Original line number Original line Diff line number Diff line
@@ -8,27 +8,29 @@ import sys


def serializedATN():
def serializedATN():
    with StringIO() as buf:
    with StringIO() as buf:
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\f")
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\r")
        buf.write(":\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")
        buf.write("A\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")
        buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\3\2\3\2\3\2\3\2")
        buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\3\2\3\2\3\2")
        buf.write("\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3")
        buf.write("\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3")
        buf.write("\t\3\t\3\t\3\t\3\t\3\n\6\n\60\n\n\r\n\16\n\61\3\13\6\13")
        buf.write("\b\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\5\n\64\n\n\3\13")
        buf.write("\65\n\13\r\13\16\13\66\3\13\3\13\2\2\f\3\3\5\4\7\5\t\6")
        buf.write("\6\13\67\n\13\r\13\16\138\3\f\6\f<\n\f\r\f\16\f=\3\f\3")
        buf.write("\13\7\r\b\17\t\21\n\23\13\25\f\3\2\4\5\2\62;C\\c|\5\2")
        buf.write("\f\2\2\r\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f")
        buf.write("\13\f\17\17\"\"\2;\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2")
        buf.write("\27\r\3\2\4\5\2\62;C\\c|\5\2\13\f\17\17\"\"\2C\2\3\3\2")
        buf.write("\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21")
        buf.write("\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2")
        buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\3\27\3\2\2\2\5\34\3")
        buf.write("\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2")
        buf.write("\2\2\2\7\36\3\2\2\2\t \3\2\2\2\13\"\3\2\2\2\r$\3\2\2\2")
        buf.write("\25\3\2\2\2\2\27\3\2\2\2\3\31\3\2\2\2\5\36\3\2\2\2\7 ")
        buf.write("\17&\3\2\2\2\21(\3\2\2\2\23/\3\2\2\2\25\64\3\2\2\2\27")
        buf.write("\3\2\2\2\t\"\3\2\2\2\13$\3\2\2\2\r&\3\2\2\2\17(\3\2\2")
        buf.write("\30\7k\2\2\30\31\7p\2\2\31\32\7k\2\2\32\33\7v\2\2\33\4")
        buf.write("\2\21*\3\2\2\2\23\63\3\2\2\2\25\66\3\2\2\2\27;\3\2\2\2")
        buf.write("\3\2\2\2\34\35\7?\2\2\35\6\3\2\2\2\36\37\7*\2\2\37\b\3")
        buf.write("\31\32\7k\2\2\32\33\7p\2\2\33\34\7k\2\2\34\35\7v\2\2\35")
        buf.write("\2\2\2 !\7+\2\2!\n\3\2\2\2\"#\7}\2\2#\f\3\2\2\2$%\7\177")
        buf.write("\4\3\2\2\2\36\37\7?\2\2\37\6\3\2\2\2 !\7*\2\2!\b\3\2\2")
        buf.write("\2\2%\16\3\2\2\2&\'\7.\2\2\'\20\3\2\2\2()\7h\2\2)*\7k")
        buf.write("\2\"#\7+\2\2#\n\3\2\2\2$%\7}\2\2%\f\3\2\2\2&\'\7\177\2")
        buf.write("\2\2*+\7p\2\2+,\7c\2\2,-\7n\2\2-\22\3\2\2\2.\60\t\2\2")
        buf.write("\2\'\16\3\2\2\2()\7.\2\2)\20\3\2\2\2*+\7h\2\2+,\7k\2\2")
        buf.write("\2/.\3\2\2\2\60\61\3\2\2\2\61/\3\2\2\2\61\62\3\2\2\2\62")
        buf.write(",-\7p\2\2-.\7c\2\2./\7n\2\2/\22\3\2\2\2\60\64\7\u03b7")
        buf.write("\24\3\2\2\2\63\65\t\3\2\2\64\63\3\2\2\2\65\66\3\2\2\2")
        buf.write("\2\2\61\62\7^\2\2\62\64\7g\2\2\63\60\3\2\2\2\63\61\3\2")
        buf.write("\66\64\3\2\2\2\66\67\3\2\2\2\678\3\2\2\289\b\13\2\29\26")
        buf.write("\2\2\64\24\3\2\2\2\65\67\t\2\2\2\66\65\3\2\2\2\678\3\2")
        buf.write("\3\2\2\2\5\2\61\66\3\b\2\2")
        buf.write("\2\28\66\3\2\2\289\3\2\2\29\26\3\2\2\2:<\t\3\2\2;:\3\2")
        buf.write("\2\2<=\3\2\2\2=;\3\2\2\2=>\3\2\2\2>?\3\2\2\2?@\b\f\2\2")
        buf.write("@\30\3\2\2\2\6\2\638=\3\b\2\2")
        return buf.getvalue()
        return buf.getvalue()




@@ -46,8 +48,9 @@ class NFALexer(Lexer):
    RIGHT_BRACKET = 6
    RIGHT_BRACKET = 6
    COMMA = 7
    COMMA = 7
    FINAL = 8
    FINAL = 8
    STATE = 9
    EPSILON = 9
    WS = 10
    STATE = 10
    WS = 11


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


@@ -58,11 +61,11 @@ class NFALexer(Lexer):


    symbolicNames = [ "<INVALID>",
    symbolicNames = [ "<INVALID>",
            "INIT", "EQUALS", "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "LEFT_BRACKET", 
            "INIT", "EQUALS", "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "LEFT_BRACKET", 
            "RIGHT_BRACKET", "COMMA", "FINAL", "STATE", "WS" ]
            "RIGHT_BRACKET", "COMMA", "FINAL", "EPSILON", "STATE", "WS" ]


    ruleNames = [ "INIT", "EQUALS", "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", 
    ruleNames = [ "INIT", "EQUALS", "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", 
                  "LEFT_BRACKET", "RIGHT_BRACKET", "COMMA", "FINAL", "STATE", 
                  "LEFT_BRACKET", "RIGHT_BRACKET", "COMMA", "FINAL", "EPSILON", 
                  "WS" ]
                  "STATE", "WS" ]


    grammarFileName = "NFA.g4"
    grammarFileName = "NFA.g4"


+55 −38
Original line number Original line Diff line number Diff line
@@ -11,25 +11,26 @@ else:


def serializedATN():
def serializedATN():
    with StringIO() as buf:
    with StringIO() as buf:
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\f")
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\r")
        buf.write(":\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2")
        buf.write("=\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2")
        buf.write("\3\2\7\2\21\n\2\f\2\16\2\24\13\2\3\2\3\2\3\3\3\3\3\3\3")
        buf.write("\3\2\7\2\21\n\2\f\2\16\2\24\13\2\3\2\3\2\3\3\3\3\3\3\3")
        buf.write("\3\5\3\34\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5")
        buf.write("\3\5\3\34\n\3\3\4\3\4\3\4\3\4\3\4\5\4#\n\4\3\4\3\4\3\4")
        buf.write("\3\5\3\5\7\5*\n\5\f\5\16\5-\13\5\3\5\5\5\60\n\5\3\5\3")
        buf.write("\3\4\3\5\3\5\3\5\3\5\7\5-\n\5\f\5\16\5\60\13\5\3\5\5\5")
        buf.write("\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\2\2\b\2\4\6\b\n\f\2\2\2")
        buf.write("\63\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\2\2\b\2\4")
        buf.write("\67\2\16\3\2\2\2\4\33\3\2\2\2\6\35\3\2\2\2\b%\3\2\2\2")
        buf.write("\6\b\n\f\2\2\2;\2\16\3\2\2\2\4\33\3\2\2\2\6\35\3\2\2\2")
        buf.write("\n\63\3\2\2\2\f\67\3\2\2\2\16\22\5\4\3\2\17\21\5\6\4\2")
        buf.write("\b(\3\2\2\2\n\66\3\2\2\2\f:\3\2\2\2\16\22\5\4\3\2\17\21")
        buf.write("\20\17\3\2\2\2\21\24\3\2\2\2\22\20\3\2\2\2\22\23\3\2\2")
        buf.write("\5\6\4\2\20\17\3\2\2\2\21\24\3\2\2\2\22\20\3\2\2\2\22")
        buf.write("\2\23\25\3\2\2\2\24\22\3\2\2\2\25\26\5\n\6\2\26\3\3\2")
        buf.write("\23\3\2\2\2\23\25\3\2\2\2\24\22\3\2\2\2\25\26\5\n\6\2")
        buf.write("\2\2\27\30\7\3\2\2\30\31\7\4\2\2\31\34\5\f\7\2\32\34\3")
        buf.write("\26\3\3\2\2\2\27\30\7\3\2\2\30\31\7\4\2\2\31\34\5\f\7")
        buf.write("\2\2\2\33\27\3\2\2\2\33\32\3\2\2\2\34\5\3\2\2\2\35\36")
        buf.write("\2\32\34\3\2\2\2\33\27\3\2\2\2\33\32\3\2\2\2\34\5\3\2")
        buf.write("\7\5\2\2\36\37\5\f\7\2\37 \7\t\2\2 !\5\f\7\2!\"\7\6\2")
        buf.write("\2\2\35\36\7\5\2\2\36\37\5\f\7\2\37\"\7\t\2\2 #\5\f\7")
        buf.write("\2\"#\7\4\2\2#$\5\b\5\2$\7\3\2\2\2%/\7\7\2\2&+\5\f\7\2")
        buf.write("\2!#\7\13\2\2\" \3\2\2\2\"!\3\2\2\2#$\3\2\2\2$%\7\6\2")
        buf.write("\'(\7\t\2\2(*\5\f\7\2)\'\3\2\2\2*-\3\2\2\2+)\3\2\2\2+")
        buf.write("\2%&\7\4\2\2&\'\5\b\5\2\'\7\3\2\2\2(\62\7\7\2\2).\5\f")
        buf.write(",\3\2\2\2,\60\3\2\2\2-+\3\2\2\2.\60\3\2\2\2/&\3\2\2\2")
        buf.write("\7\2*+\7\t\2\2+-\5\f\7\2,*\3\2\2\2-\60\3\2\2\2.,\3\2\2")
        buf.write("/.\3\2\2\2\60\61\3\2\2\2\61\62\7\b\2\2\62\t\3\2\2\2\63")
        buf.write("\2./\3\2\2\2/\63\3\2\2\2\60.\3\2\2\2\61\63\3\2\2\2\62")
        buf.write("\64\7\n\2\2\64\65\7\4\2\2\65\66\5\b\5\2\66\13\3\2\2\2")
        buf.write(")\3\2\2\2\62\61\3\2\2\2\63\64\3\2\2\2\64\65\7\b\2\2\65")
        buf.write("\678\7\13\2\28\r\3\2\2\2\6\22\33+/")
        buf.write("\t\3\2\2\2\66\67\7\n\2\2\678\7\4\2\289\5\b\5\29\13\3\2")
        buf.write("\2\2:;\7\f\2\2;\r\3\2\2\2\7\22\33\".\62")
        return buf.getvalue()
        return buf.getvalue()




@@ -48,7 +49,7 @@ class NFAParser ( Parser ):


    symbolicNames = [ "<INVALID>", "INIT", "EQUALS", "LEFT_PARENTHESIS", 
    symbolicNames = [ "<INVALID>", "INIT", "EQUALS", "LEFT_PARENTHESIS", 
                      "RIGHT_PARENTHESIS", "LEFT_BRACKET", "RIGHT_BRACKET", 
                      "RIGHT_PARENTHESIS", "LEFT_BRACKET", "RIGHT_BRACKET", 
                      "COMMA", "FINAL", "STATE", "WS" ]
                      "COMMA", "FINAL", "EPSILON", "STATE", "WS" ]


    RULE_start = 0
    RULE_start = 0
    RULE_init = 1
    RULE_init = 1
@@ -68,8 +69,9 @@ class NFAParser ( Parser ):
    RIGHT_BRACKET=6
    RIGHT_BRACKET=6
    COMMA=7
    COMMA=7
    FINAL=8
    FINAL=8
    STATE=9
    EPSILON=9
    WS=10
    STATE=10
    WS=11


    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
        super().__init__(input, output)
        super().__init__(input, output)
@@ -235,6 +237,9 @@ class NFAParser ( Parser ):
            return self.getTypedRuleContext(NFAParser.StatesetContext,0)
            return self.getTypedRuleContext(NFAParser.StatesetContext,0)




        def EPSILON(self):
            return self.getToken(NFAParser.EPSILON, 0)

        def getRuleIndex(self):
        def getRuleIndex(self):
            return NFAParser.RULE_production
            return NFAParser.RULE_production


@@ -261,13 +266,25 @@ class NFAParser ( Parser ):
            self.statename()
            self.statename()
            self.state = 29
            self.state = 29
            self.match(NFAParser.COMMA)
            self.match(NFAParser.COMMA)
            self.state = 32
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [NFAParser.STATE]:
                self.state = 30
                self.state = 30
                self.statename()
                self.statename()
                pass
            elif token in [NFAParser.EPSILON]:
                self.state = 31
                self.state = 31
                self.match(NFAParser.EPSILON)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 34
            self.match(NFAParser.RIGHT_PARENTHESIS)
            self.match(NFAParser.RIGHT_PARENTHESIS)
            self.state = 32
            self.state = 35
            self.match(NFAParser.EQUALS)
            self.match(NFAParser.EQUALS)
            self.state = 33
            self.state = 36
            self.stateset()
            self.stateset()
        except RecognitionException as re:
        except RecognitionException as re:
            localctx.exception = re
            localctx.exception = re
@@ -324,23 +341,23 @@ class NFAParser ( Parser ):
        self._la = 0 # Token type
        self._la = 0 # Token type
        try:
        try:
            self.enterOuterAlt(localctx, 1)
            self.enterOuterAlt(localctx, 1)
            self.state = 35
            self.state = 38
            self.match(NFAParser.LEFT_BRACKET)
            self.match(NFAParser.LEFT_BRACKET)
            self.state = 45
            self.state = 48
            self._errHandler.sync(self)
            self._errHandler.sync(self)
            token = self._input.LA(1)
            token = self._input.LA(1)
            if token in [NFAParser.STATE]:
            if token in [NFAParser.STATE]:
                self.state = 36
                self.state = 39
                self.statename()
                self.statename()
                self.state = 41
                self.state = 44
                self._errHandler.sync(self)
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                _la = self._input.LA(1)
                while _la==NFAParser.COMMA:
                while _la==NFAParser.COMMA:
                    self.state = 37
                    self.state = 40
                    self.match(NFAParser.COMMA)
                    self.match(NFAParser.COMMA)
                    self.state = 38
                    self.state = 41
                    self.statename()
                    self.statename()
                    self.state = 43
                    self.state = 46
                    self._errHandler.sync(self)
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    _la = self._input.LA(1)


@@ -350,7 +367,7 @@ class NFAParser ( Parser ):
            else:
            else:
                raise NoViableAltException(self)
                raise NoViableAltException(self)


            self.state = 47
            self.state = 50
            self.match(NFAParser.RIGHT_BRACKET)
            self.match(NFAParser.RIGHT_BRACKET)
        except RecognitionException as re:
        except RecognitionException as re:
            localctx.exception = re
            localctx.exception = re
@@ -397,11 +414,11 @@ class NFAParser ( Parser ):
        self.enterRule(localctx, 8, self.RULE_final)
        self.enterRule(localctx, 8, self.RULE_final)
        try:
        try:
            self.enterOuterAlt(localctx, 1)
            self.enterOuterAlt(localctx, 1)
            self.state = 49
            self.state = 52
            self.match(NFAParser.FINAL)
            self.match(NFAParser.FINAL)
            self.state = 50
            self.state = 53
            self.match(NFAParser.EQUALS)
            self.match(NFAParser.EQUALS)
            self.state = 51
            self.state = 54
            self.stateset()
            self.stateset()
        except RecognitionException as re:
        except RecognitionException as re:
            localctx.exception = re
            localctx.exception = re
@@ -441,7 +458,7 @@ class NFAParser ( Parser ):
        self.enterRule(localctx, 10, self.RULE_statename)
        self.enterRule(localctx, 10, self.RULE_statename)
        try:
        try:
            self.enterOuterAlt(localctx, 1)
            self.enterOuterAlt(localctx, 1)
            self.state = 53
            self.state = 56
            self.match(NFAParser.STATE)
            self.match(NFAParser.STATE)
        except RecognitionException as re:
        except RecognitionException as re:
            localctx.exception = re
            localctx.exception = re
+2 −2
Original line number Original line Diff line number Diff line
@@ -28,8 +28,8 @@ POS_ITER : '^+';
CONCAT   : '.';
CONCAT   : '.';
UNION    : '+';
UNION    : '+';
ALPHABET : [a-zA-Z0-9];
ALPHABET : [a-zA-Z0-9];
EPSILON  : 'ε';
EPSILON  : ('ε' | '\\''e');
EMPTYSET : '∅';
EMPTYSET : ('∅' | '\\''0');


/* Characters to be ignored */
/* Characters to be ignored */
WS : [ \r\t\n]+ -> skip ;
WS : [ \r\t\n]+ -> skip ;
+19 −17
Original line number Original line Diff line number Diff line
@@ -9,24 +9,26 @@ import sys
def serializedATN():
def serializedATN():
    with StringIO() as buf:
    with StringIO() as buf:
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\f")
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\f")
        buf.write("\64\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t")
        buf.write("\67\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t")
        buf.write("\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\3\2\3\3\3\3\3")
        buf.write("\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\3\2\3\2\3\3\3\3\3")
        buf.write("\4\3\4\3\4\5\4\37\n\4\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\b")
        buf.write("\4\3\4\3\4\5\4\37\n\4\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\b")
        buf.write("\3\b\3\t\3\t\3\n\3\n\3\13\6\13/\n\13\r\13\16\13\60\3\13")
        buf.write("\3\b\3\t\3\t\3\t\5\t-\n\t\3\n\3\n\3\13\6\13\62\n\13\r")
        buf.write("\3\13\2\2\f\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25")
        buf.write("\13\16\13\63\3\13\3\13\2\2\f\3\3\5\4\7\5\t\6\13\7\r\b")
        buf.write("\f\3\2\4\5\2\62;C\\c|\5\2\13\f\17\17\"\"\2\65\2\3\3\2")
        buf.write("\17\t\21\n\23\13\25\f\3\2\4\5\2\62;C\\c|\5\2\13\f\17\17")
        buf.write("\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2")
        buf.write("\"\"\29\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2")
        buf.write("\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2")
        buf.write("\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2")
        buf.write("\25\3\2\2\2\3\27\3\2\2\2\5\31\3\2\2\2\7\36\3\2\2\2\t ")
        buf.write("\2\23\3\2\2\2\2\25\3\2\2\2\3\27\3\2\2\2\5\31\3\2\2\2\7")
        buf.write("\3\2\2\2\13#\3\2\2\2\r%\3\2\2\2\17\'\3\2\2\2\21)\3\2\2")
        buf.write("\36\3\2\2\2\t \3\2\2\2\13#\3\2\2\2\r%\3\2\2\2\17\'\3\2")
        buf.write("\2\23+\3\2\2\2\25.\3\2\2\2\27\30\7*\2\2\30\4\3\2\2\2\31")
        buf.write("\2\2\21,\3\2\2\2\23.\3\2\2\2\25\61\3\2\2\2\27\30\7*\2")
        buf.write("\32\7+\2\2\32\6\3\2\2\2\33\37\7,\2\2\34\35\7`\2\2\35\37")
        buf.write("\2\30\4\3\2\2\2\31\32\7+\2\2\32\6\3\2\2\2\33\37\7,\2\2")
        buf.write("\7,\2\2\36\33\3\2\2\2\36\34\3\2\2\2\37\b\3\2\2\2 !\7`")
        buf.write("\34\35\7`\2\2\35\37\7,\2\2\36\33\3\2\2\2\36\34\3\2\2\2")
        buf.write("\2\2!\"\7-\2\2\"\n\3\2\2\2#$\7\60\2\2$\f\3\2\2\2%&\7-")
        buf.write("\37\b\3\2\2\2 !\7`\2\2!\"\7-\2\2\"\n\3\2\2\2#$\7\60\2")
        buf.write("\2\2&\16\3\2\2\2\'(\t\2\2\2(\20\3\2\2\2)*\7\u03b7\2\2")
        buf.write("\2$\f\3\2\2\2%&\7-\2\2&\16\3\2\2\2\'(\t\2\2\2(\20\3\2")
        buf.write("*\22\3\2\2\2+,\7\u2207\2\2,\24\3\2\2\2-/\t\3\2\2.-\3\2")
        buf.write("\2\2)-\7\u03b7\2\2*+\7^\2\2+-\7g\2\2,)\3\2\2\2,*\3\2\2")
        buf.write("\2\2/\60\3\2\2\2\60.\3\2\2\2\60\61\3\2\2\2\61\62\3\2\2")
        buf.write("\2-\22\3\2\2\2./\7\u2207\2\2/\24\3\2\2\2\60\62\t\3\2\2")
        buf.write("\2\62\63\b\13\2\2\63\26\3\2\2\2\5\2\36\60\3\b\2\2")
        buf.write("\61\60\3\2\2\2\62\63\3\2\2\2\63\61\3\2\2\2\63\64\3\2\2")
        buf.write("\2\64\65\3\2\2\2\65\66\b\13\2\2\66\26\3\2\2\2\6\2\36,")
        buf.write("\63\3\b\2\2")
        return buf.getvalue()
        return buf.getvalue()




@@ -52,7 +54,7 @@ class RegExLexer(Lexer):
    modeNames = [ "DEFAULT_MODE" ]
    modeNames = [ "DEFAULT_MODE" ]


    literalNames = [ "<INVALID>",
    literalNames = [ "<INVALID>",
            "'('", "')'", "'^+'", "'.'", "'+'", "'\u03B5'", "'\u2205'" ]
            "'('", "')'", "'^+'", "'.'", "'+'", "'\u2205'" ]


    symbolicNames = [ "<INVALID>",
    symbolicNames = [ "<INVALID>",
            "LEFT_PAR", "RIGHT_PAR", "ITER", "POS_ITER", "CONCAT", "UNION", 
            "LEFT_PAR", "RIGHT_PAR", "ITER", "POS_ITER", "CONCAT", "UNION", 
Loading