Loading NFA.g4 +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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 */ Loading NFALexer.py +29 −26 Original line number Original line Diff line number Diff line Loading @@ -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() Loading @@ -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" ] Loading @@ -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" Loading NFAParser.py +55 −38 Original line number Original line Diff line number Diff line Loading @@ -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() Loading @@ -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 Loading @@ -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) Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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) Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading RegEx.g4 +2 −2 Original line number Original line Diff line number Diff line Loading @@ -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 ; RegExLexer.py +19 −17 Original line number Original line Diff line number Diff line Loading @@ -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() Loading @@ -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 Loading
NFA.g4 +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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 */ Loading
NFALexer.py +29 −26 Original line number Original line Diff line number Diff line Loading @@ -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() Loading @@ -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" ] Loading @@ -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" Loading
NFAParser.py +55 −38 Original line number Original line Diff line number Diff line Loading @@ -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() Loading @@ -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 Loading @@ -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) Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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) Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading
RegEx.g4 +2 −2 Original line number Original line Diff line number Diff line Loading @@ -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 ;
RegExLexer.py +19 −17 Original line number Original line Diff line number Diff line Loading @@ -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() Loading @@ -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