diff --git a/.gitignore b/.gitignore index 3dc31596..2a1464dd 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,3 @@ nosetests.xml # PLY parser.out -parsetab.py diff --git a/flanker/addresslib/_parser/addr_spec_parsetab.py b/flanker/addresslib/_parser/addr_spec_parsetab.py new file mode 100644 index 00000000..3ec67846 --- /dev/null +++ b/flanker/addresslib/_parser/addr_spec_parsetab.py @@ -0,0 +1,90 @@ + +# addr_spec_parsetab.py +# This file is automatically generated. Do not edit. +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'addr_specFWSP AT DOT COMMA SEMICOLON LANGLE RANGLE ATOM DOT_ATOM LBRACKET RBRACKET DTEXT DQUOTE QTEXT QPAIR LPAREN RPAREN CTEXT URLmailbox_or_url_list : mailbox_or_url_list delim mailbox_or_url\n | mailbox_or_url_list delim\n | mailbox_or_urldelim : delim fwsp COMMA\n | delim fwsp SEMICOLON\n | COMMA\n | SEMICOLONmailbox_or_url : mailbox\n | urlurl : ofwsp URL ofwspmailbox : addr_spec\n | angle_addr\n | name_addrname_addr : ofwsp phrase angle_addrangle_addr : ofwsp LANGLE addr_spec RANGLE ofwspaddr_spec : ofwsp local_part AT domain ofwsplocal_part : DOT_ATOM\n | ATOM\n | quoted_stringdomain : DOT_ATOM\n | ATOM\n | domain_literalquoted_string : DQUOTE quoted_string_text DQUOTE\n | DQUOTE DQUOTEquoted_string_text : quoted_string_text QTEXT\n | quoted_string_text QPAIR\n | quoted_string_text fwsp\n | QTEXT\n | QPAIR\n | fwspdomain_literal : LBRACKET domain_literal_text RBRACKET\n | LBRACKET RBRACKETdomain_literal_text : domain_literal_text DTEXT\n | domain_literal_text fwsp\n | DTEXT\n | fwspcomment : LPAREN comment_text RPAREN\n | LPAREN RPARENcomment_text : comment_text CTEXT\n | comment_text fwsp\n | CTEXT\n | fwspphrase : phrase fwsp ATOM\n | phrase fwsp DOT_ATOM\n | phrase fwsp DOT\n | phrase fwsp quoted_string\n | phrase ATOM\n | phrase DOT_ATOM\n | phrase DOT\n | phrase quoted_string\n | ATOM\n | DOT_ATOM\n | DOT\n | quoted_stringofwsp : fwsp comment fwsp\n | fwsp comment\n | comment fwsp\n | comment\n | fwsp\n |fwsp : FWSP' + +_lr_action_items = {'FWSP':([0,2,4,6,7,10,14,15,16,17,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,38,39,40,41,42,43,44,],[4,4,-61,4,4,4,-42,4,-38,-41,-30,-29,-28,4,-40,-37,-39,4,4,-20,-21,-22,-27,-26,-25,-36,-35,4,-32,-34,-33,-31,]),'QPAIR':([4,10,20,21,22,24,33,34,35,],[-61,21,-30,-29,-28,34,-27,-26,-25,]),'QTEXT':([4,10,20,21,22,24,33,34,35,],[-61,22,-30,-29,-28,35,-27,-26,-25,]),'DTEXT':([4,29,38,39,40,42,43,],[-61,39,-36,-35,43,-34,-33,]),'DQUOTE':([0,1,2,3,4,7,8,10,16,18,20,21,22,24,26,33,34,35,],[-60,-59,-58,10,-61,-56,-57,23,-38,-55,-30,-29,-28,36,-37,-27,-26,-25,]),'LBRACKET':([19,],[29,]),'DOT_ATOM':([0,1,2,3,4,7,8,16,18,19,26,],[-60,-59,-58,11,-61,-56,-57,-38,-55,30,-37,]),'AT':([9,11,12,13,23,36,],[19,-17,-18,-19,-24,-23,]),'LPAREN':([0,1,4,28,30,31,32,41,44,],[6,6,-61,6,-20,-21,-22,-32,-31,]),'ATOM':([0,1,2,3,4,7,8,16,18,19,26,],[-60,-59,-58,12,-61,-56,-57,-38,-55,31,-37,]),'RPAREN':([4,6,14,15,17,25,27,],[-61,16,-42,26,-41,-40,-39,]),'RBRACKET':([4,29,38,39,40,42,43,],[-61,41,-36,-35,44,-34,-33,]),'CTEXT':([4,6,14,15,17,25,27,],[-61,17,-42,27,-41,-40,-39,]),'$end':([1,2,4,5,7,8,16,18,26,28,30,31,32,37,41,44,],[-59,-58,-61,0,-56,-57,-38,-55,-37,-60,-20,-21,-22,-16,-32,-31,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'fwsp':([0,2,6,7,10,15,24,28,29,40,],[1,8,14,18,20,25,33,1,38,42,]),'comment':([0,1,28,],[2,7,2,]),'domain':([19,],[28,]),'comment_text':([6,],[15,]),'ofwsp':([0,28,],[3,37,]),'local_part':([3,],[9,]),'quoted_string_text':([10,],[24,]),'domain_literal_text':([29,],[40,]),'addr_spec':([0,],[5,]),'quoted_string':([3,],[13,]),'domain_literal':([19,],[32,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> addr_spec","S'",1,None,None,None), + ('mailbox_or_url_list -> mailbox_or_url_list delim mailbox_or_url','mailbox_or_url_list',3,'p_expression_mailbox_or_url_list','parser.py',19), + ('mailbox_or_url_list -> mailbox_or_url_list delim','mailbox_or_url_list',2,'p_expression_mailbox_or_url_list','parser.py',20), + ('mailbox_or_url_list -> mailbox_or_url','mailbox_or_url_list',1,'p_expression_mailbox_or_url_list','parser.py',21), + ('delim -> delim fwsp COMMA','delim',3,'p_delim','parser.py',30), + ('delim -> delim fwsp SEMICOLON','delim',3,'p_delim','parser.py',31), + ('delim -> COMMA','delim',1,'p_delim','parser.py',32), + ('delim -> SEMICOLON','delim',1,'p_delim','parser.py',33), + ('mailbox_or_url -> mailbox','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',36), + ('mailbox_or_url -> url','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',37), + ('url -> ofwsp URL ofwsp','url',3,'p_expression_url','parser.py',41), + ('mailbox -> addr_spec','mailbox',1,'p_expression_mailbox','parser.py',45), + ('mailbox -> angle_addr','mailbox',1,'p_expression_mailbox','parser.py',46), + ('mailbox -> name_addr','mailbox',1,'p_expression_mailbox','parser.py',47), + ('name_addr -> ofwsp phrase angle_addr','name_addr',3,'p_expression_name_addr','parser.py',51), + ('angle_addr -> ofwsp LANGLE addr_spec RANGLE ofwsp','angle_addr',5,'p_expression_angle_addr','parser.py',55), + ('addr_spec -> ofwsp local_part AT domain ofwsp','addr_spec',5,'p_expression_addr_spec','parser.py',59), + ('local_part -> DOT_ATOM','local_part',1,'p_expression_local_part','parser.py',63), + ('local_part -> ATOM','local_part',1,'p_expression_local_part','parser.py',64), + ('local_part -> quoted_string','local_part',1,'p_expression_local_part','parser.py',65), + ('domain -> DOT_ATOM','domain',1,'p_expression_domain','parser.py',69), + ('domain -> ATOM','domain',1,'p_expression_domain','parser.py',70), + ('domain -> domain_literal','domain',1,'p_expression_domain','parser.py',71), + ('quoted_string -> DQUOTE quoted_string_text DQUOTE','quoted_string',3,'p_expression_quoted_string','parser.py',75), + ('quoted_string -> DQUOTE DQUOTE','quoted_string',2,'p_expression_quoted_string','parser.py',76), + ('quoted_string_text -> quoted_string_text QTEXT','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',83), + ('quoted_string_text -> quoted_string_text QPAIR','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',84), + ('quoted_string_text -> quoted_string_text fwsp','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',85), + ('quoted_string_text -> QTEXT','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',86), + ('quoted_string_text -> QPAIR','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',87), + ('quoted_string_text -> fwsp','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',88), + ('domain_literal -> LBRACKET domain_literal_text RBRACKET','domain_literal',3,'p_expression_domain_literal','parser.py',92), + ('domain_literal -> LBRACKET RBRACKET','domain_literal',2,'p_expression_domain_literal','parser.py',93), + ('domain_literal_text -> domain_literal_text DTEXT','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',100), + ('domain_literal_text -> domain_literal_text fwsp','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',101), + ('domain_literal_text -> DTEXT','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',102), + ('domain_literal_text -> fwsp','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',103), + ('comment -> LPAREN comment_text RPAREN','comment',3,'p_expression_comment','parser.py',107), + ('comment -> LPAREN RPAREN','comment',2,'p_expression_comment','parser.py',108), + ('comment_text -> comment_text CTEXT','comment_text',2,'p_expression_comment_text','parser.py',112), + ('comment_text -> comment_text fwsp','comment_text',2,'p_expression_comment_text','parser.py',113), + ('comment_text -> CTEXT','comment_text',1,'p_expression_comment_text','parser.py',114), + ('comment_text -> fwsp','comment_text',1,'p_expression_comment_text','parser.py',115), + ('phrase -> phrase fwsp ATOM','phrase',3,'p_expression_phrase','parser.py',119), + ('phrase -> phrase fwsp DOT_ATOM','phrase',3,'p_expression_phrase','parser.py',120), + ('phrase -> phrase fwsp DOT','phrase',3,'p_expression_phrase','parser.py',121), + ('phrase -> phrase fwsp quoted_string','phrase',3,'p_expression_phrase','parser.py',122), + ('phrase -> phrase ATOM','phrase',2,'p_expression_phrase','parser.py',123), + ('phrase -> phrase DOT_ATOM','phrase',2,'p_expression_phrase','parser.py',124), + ('phrase -> phrase DOT','phrase',2,'p_expression_phrase','parser.py',125), + ('phrase -> phrase quoted_string','phrase',2,'p_expression_phrase','parser.py',126), + ('phrase -> ATOM','phrase',1,'p_expression_phrase','parser.py',127), + ('phrase -> DOT_ATOM','phrase',1,'p_expression_phrase','parser.py',128), + ('phrase -> DOT','phrase',1,'p_expression_phrase','parser.py',129), + ('phrase -> quoted_string','phrase',1,'p_expression_phrase','parser.py',130), + ('ofwsp -> fwsp comment fwsp','ofwsp',3,'p_expression_ofwsp','parser.py',139), + ('ofwsp -> fwsp comment','ofwsp',2,'p_expression_ofwsp','parser.py',140), + ('ofwsp -> comment fwsp','ofwsp',2,'p_expression_ofwsp','parser.py',141), + ('ofwsp -> comment','ofwsp',1,'p_expression_ofwsp','parser.py',142), + ('ofwsp -> fwsp','ofwsp',1,'p_expression_ofwsp','parser.py',143), + ('ofwsp -> ','ofwsp',0,'p_expression_ofwsp','parser.py',144), + ('fwsp -> FWSP','fwsp',1,'p_expression_fwsp','parser.py',148), +] diff --git a/flanker/addresslib/_parser/mailbox_or_url_list_parsetab.py b/flanker/addresslib/_parser/mailbox_or_url_list_parsetab.py new file mode 100644 index 00000000..a0f07b05 --- /dev/null +++ b/flanker/addresslib/_parser/mailbox_or_url_list_parsetab.py @@ -0,0 +1,90 @@ + +# mailbox_or_url_list_parsetab.py +# This file is automatically generated. Do not edit. +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'mailbox_or_url_listFWSP AT DOT COMMA SEMICOLON LANGLE RANGLE ATOM DOT_ATOM LBRACKET RBRACKET DTEXT DQUOTE QTEXT QPAIR LPAREN RPAREN CTEXT URLmailbox_or_url_list : mailbox_or_url_list delim mailbox_or_url\n | mailbox_or_url_list delim\n | mailbox_or_urldelim : delim fwsp COMMA\n | delim fwsp SEMICOLON\n | COMMA\n | SEMICOLONmailbox_or_url : mailbox\n | urlurl : ofwsp URL ofwspmailbox : addr_spec\n | angle_addr\n | name_addrname_addr : ofwsp phrase angle_addrangle_addr : ofwsp LANGLE addr_spec RANGLE ofwspaddr_spec : ofwsp local_part AT domain ofwsplocal_part : DOT_ATOM\n | ATOM\n | quoted_stringdomain : DOT_ATOM\n | ATOM\n | domain_literalquoted_string : DQUOTE quoted_string_text DQUOTE\n | DQUOTE DQUOTEquoted_string_text : quoted_string_text QTEXT\n | quoted_string_text QPAIR\n | quoted_string_text fwsp\n | QTEXT\n | QPAIR\n | fwspdomain_literal : LBRACKET domain_literal_text RBRACKET\n | LBRACKET RBRACKETdomain_literal_text : domain_literal_text DTEXT\n | domain_literal_text fwsp\n | DTEXT\n | fwspcomment : LPAREN comment_text RPAREN\n | LPAREN RPARENcomment_text : comment_text CTEXT\n | comment_text fwsp\n | CTEXT\n | fwspphrase : phrase fwsp ATOM\n | phrase fwsp DOT_ATOM\n | phrase fwsp DOT\n | phrase fwsp quoted_string\n | phrase ATOM\n | phrase DOT_ATOM\n | phrase DOT\n | phrase quoted_string\n | ATOM\n | DOT_ATOM\n | DOT\n | quoted_stringofwsp : fwsp comment fwsp\n | fwsp comment\n | comment fwsp\n | comment\n | fwsp\n |fwsp : FWSP' + +_lr_action_items = {'FWSP':([0,2,4,9,13,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,36,37,38,39,40,44,45,46,47,48,49,50,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,74,75,76,77,78,79,80,],[4,4,-61,4,4,4,4,-51,4,-52,4,-54,-53,-42,4,-38,-41,-7,4,-6,-30,-29,-28,-24,4,-48,-47,-50,-49,-40,-37,-39,4,4,4,-20,-21,-22,-27,-26,-25,-23,-44,-43,-46,-45,-5,-4,-36,-35,4,-32,-34,-33,-31,]),'LANGLE':([0,1,2,3,4,13,14,18,20,21,22,23,26,28,29,30,31,39,41,42,44,45,46,47,49,51,65,66,67,68,69,70,71,],[-60,-59,-58,15,-61,-56,-57,-51,-52,-60,-54,-53,-38,-7,-60,-6,-55,-24,-59,15,-48,-47,-50,-49,-37,-59,-23,-44,-43,-46,-45,-5,-4,]),'QPAIR':([4,19,36,37,38,40,62,63,64,],[-61,37,-30,-29,-28,63,-27,-26,-25,]),'SEMICOLON':([1,2,4,5,6,7,8,10,11,12,13,14,16,26,28,29,30,31,34,43,49,51,52,56,57,59,60,61,70,71,72,73,77,80,],[-59,-58,-61,-13,-11,-3,-8,28,-12,-9,-56,-57,-60,-38,-7,-2,-6,-55,-10,-14,-37,70,-1,-60,-60,-20,-21,-22,-5,-4,-15,-16,-32,-31,]),'URL':([0,1,2,3,4,13,14,26,28,29,30,31,49,51,70,71,],[-60,-59,-58,16,-61,-56,-57,-38,-7,-60,-6,-55,-37,-59,-5,-4,]),'QTEXT':([4,19,36,37,38,40,62,63,64,],[-61,38,-30,-29,-28,64,-27,-26,-25,]),'RPAREN':([4,9,24,25,27,48,50,],[-61,26,-42,49,-41,-40,-39,]),'DTEXT':([4,58,74,75,76,78,79,],[-61,75,-36,-35,79,-34,-33,]),'DQUOTE':([0,1,2,3,4,13,14,15,18,19,20,21,22,23,26,28,29,30,31,32,36,37,38,39,40,41,44,45,46,47,49,51,62,63,64,65,66,67,68,69,70,71,],[-60,-59,-58,19,-61,-56,-57,-60,-51,39,-52,19,-54,-53,-38,-7,-60,-6,-55,19,-30,-29,-28,-24,65,19,-48,-47,-50,-49,-37,-59,-27,-26,-25,-23,-44,-43,-46,-45,-5,-4,]),'LBRACKET':([35,],[58,]),'DOT_ATOM':([0,1,2,3,4,13,14,15,18,20,21,22,23,26,28,29,30,31,32,35,39,41,44,45,46,47,49,51,65,66,67,68,69,70,71,],[-60,-59,-58,20,-61,-56,-57,-60,-51,-52,44,-54,-53,-38,-7,-60,-6,-55,53,59,-24,66,-48,-47,-50,-49,-37,-59,-23,-44,-43,-46,-45,-5,-4,]),'COMMA':([1,2,4,5,6,7,8,10,11,12,13,14,16,26,28,29,30,31,34,43,49,51,52,56,57,59,60,61,70,71,72,73,77,80,],[-59,-58,-61,-13,-11,-3,-8,30,-12,-9,-56,-57,-60,-38,-7,-2,-6,-55,-10,-14,-37,71,-1,-60,-60,-20,-21,-22,-5,-4,-15,-16,-32,-31,]),'AT':([17,18,20,22,39,53,54,55,65,],[35,-18,-17,-19,-24,-17,-18,-19,-23,]),'LPAREN':([0,1,4,15,16,18,20,21,22,23,28,29,30,39,41,44,45,46,47,51,56,57,59,60,61,65,66,67,68,69,70,71,77,80,],[9,9,-61,9,9,-51,-52,9,-54,-53,-7,9,-6,-24,9,-48,-47,-50,-49,9,9,9,-20,-21,-22,-23,-44,-43,-46,-45,-5,-4,-32,-31,]),'ATOM':([0,1,2,3,4,13,14,15,18,20,21,22,23,26,28,29,30,31,32,35,39,41,44,45,46,47,49,51,65,66,67,68,69,70,71,],[-60,-59,-58,18,-61,-56,-57,-60,-51,-52,45,-54,-53,-38,-7,-60,-6,-55,54,60,-24,67,-48,-47,-50,-49,-37,-59,-23,-44,-43,-46,-45,-5,-4,]),'RANGLE':([1,2,4,13,14,26,31,33,49,57,59,60,61,73,77,80,],[-59,-58,-61,-56,-57,-38,-55,56,-37,-60,-20,-21,-22,-16,-32,-31,]),'RBRACKET':([4,58,74,75,76,78,79,],[-61,77,-36,-35,80,-34,-33,]),'CTEXT':([4,9,24,25,27,48,50,],[-61,27,-42,50,-41,-40,-39,]),'DOT':([0,1,2,3,4,13,14,18,20,21,22,23,26,28,29,30,31,39,41,44,45,46,47,49,51,65,66,67,68,69,70,71,],[-60,-59,-58,23,-61,-56,-57,-51,-52,47,-54,-53,-38,-7,-60,-6,-55,-24,69,-48,-47,-50,-49,-37,-59,-23,-44,-43,-46,-45,-5,-4,]),'$end':([1,2,4,5,6,7,8,10,11,12,13,14,16,26,28,29,30,31,34,43,49,52,56,57,59,60,61,70,71,72,73,77,80,],[-59,-58,-61,-13,-11,-3,-8,0,-12,-9,-56,-57,-60,-38,-7,-2,-6,-55,-10,-14,-37,-1,-60,-60,-20,-21,-22,-5,-4,-15,-16,-32,-31,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'fwsp':([0,2,9,13,15,16,19,21,25,29,40,56,57,58,76,],[1,14,24,31,1,1,36,41,48,51,62,1,1,74,78,]),'comment':([0,1,15,16,21,29,41,51,56,57,],[2,13,2,2,2,2,13,13,2,2,]),'domain':([35,],[57,]),'comment_text':([9,],[25,]),'name_addr':([0,29,],[5,5,]),'ofwsp':([0,15,16,21,29,56,57,],[3,32,34,42,3,72,73,]),'mailbox_or_url_list':([0,],[10,]),'angle_addr':([0,21,29,],[11,43,11,]),'mailbox_or_url':([0,29,],[7,52,]),'local_part':([3,32,],[17,17,]),'delim':([10,],[29,]),'domain_literal_text':([58,],[76,]),'mailbox':([0,29,],[8,8,]),'quoted_string_text':([19,],[40,]),'url':([0,29,],[12,12,]),'addr_spec':([0,15,29,],[6,33,6,]),'phrase':([3,],[21,]),'quoted_string':([3,21,32,41,],[22,46,55,68,]),'domain_literal':([35,],[61,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> mailbox_or_url_list","S'",1,None,None,None), + ('mailbox_or_url_list -> mailbox_or_url_list delim mailbox_or_url','mailbox_or_url_list',3,'p_expression_mailbox_or_url_list','parser.py',19), + ('mailbox_or_url_list -> mailbox_or_url_list delim','mailbox_or_url_list',2,'p_expression_mailbox_or_url_list','parser.py',20), + ('mailbox_or_url_list -> mailbox_or_url','mailbox_or_url_list',1,'p_expression_mailbox_or_url_list','parser.py',21), + ('delim -> delim fwsp COMMA','delim',3,'p_delim','parser.py',30), + ('delim -> delim fwsp SEMICOLON','delim',3,'p_delim','parser.py',31), + ('delim -> COMMA','delim',1,'p_delim','parser.py',32), + ('delim -> SEMICOLON','delim',1,'p_delim','parser.py',33), + ('mailbox_or_url -> mailbox','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',36), + ('mailbox_or_url -> url','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',37), + ('url -> ofwsp URL ofwsp','url',3,'p_expression_url','parser.py',41), + ('mailbox -> addr_spec','mailbox',1,'p_expression_mailbox','parser.py',45), + ('mailbox -> angle_addr','mailbox',1,'p_expression_mailbox','parser.py',46), + ('mailbox -> name_addr','mailbox',1,'p_expression_mailbox','parser.py',47), + ('name_addr -> ofwsp phrase angle_addr','name_addr',3,'p_expression_name_addr','parser.py',51), + ('angle_addr -> ofwsp LANGLE addr_spec RANGLE ofwsp','angle_addr',5,'p_expression_angle_addr','parser.py',55), + ('addr_spec -> ofwsp local_part AT domain ofwsp','addr_spec',5,'p_expression_addr_spec','parser.py',59), + ('local_part -> DOT_ATOM','local_part',1,'p_expression_local_part','parser.py',63), + ('local_part -> ATOM','local_part',1,'p_expression_local_part','parser.py',64), + ('local_part -> quoted_string','local_part',1,'p_expression_local_part','parser.py',65), + ('domain -> DOT_ATOM','domain',1,'p_expression_domain','parser.py',69), + ('domain -> ATOM','domain',1,'p_expression_domain','parser.py',70), + ('domain -> domain_literal','domain',1,'p_expression_domain','parser.py',71), + ('quoted_string -> DQUOTE quoted_string_text DQUOTE','quoted_string',3,'p_expression_quoted_string','parser.py',75), + ('quoted_string -> DQUOTE DQUOTE','quoted_string',2,'p_expression_quoted_string','parser.py',76), + ('quoted_string_text -> quoted_string_text QTEXT','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',83), + ('quoted_string_text -> quoted_string_text QPAIR','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',84), + ('quoted_string_text -> quoted_string_text fwsp','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',85), + ('quoted_string_text -> QTEXT','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',86), + ('quoted_string_text -> QPAIR','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',87), + ('quoted_string_text -> fwsp','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',88), + ('domain_literal -> LBRACKET domain_literal_text RBRACKET','domain_literal',3,'p_expression_domain_literal','parser.py',92), + ('domain_literal -> LBRACKET RBRACKET','domain_literal',2,'p_expression_domain_literal','parser.py',93), + ('domain_literal_text -> domain_literal_text DTEXT','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',100), + ('domain_literal_text -> domain_literal_text fwsp','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',101), + ('domain_literal_text -> DTEXT','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',102), + ('domain_literal_text -> fwsp','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',103), + ('comment -> LPAREN comment_text RPAREN','comment',3,'p_expression_comment','parser.py',107), + ('comment -> LPAREN RPAREN','comment',2,'p_expression_comment','parser.py',108), + ('comment_text -> comment_text CTEXT','comment_text',2,'p_expression_comment_text','parser.py',112), + ('comment_text -> comment_text fwsp','comment_text',2,'p_expression_comment_text','parser.py',113), + ('comment_text -> CTEXT','comment_text',1,'p_expression_comment_text','parser.py',114), + ('comment_text -> fwsp','comment_text',1,'p_expression_comment_text','parser.py',115), + ('phrase -> phrase fwsp ATOM','phrase',3,'p_expression_phrase','parser.py',119), + ('phrase -> phrase fwsp DOT_ATOM','phrase',3,'p_expression_phrase','parser.py',120), + ('phrase -> phrase fwsp DOT','phrase',3,'p_expression_phrase','parser.py',121), + ('phrase -> phrase fwsp quoted_string','phrase',3,'p_expression_phrase','parser.py',122), + ('phrase -> phrase ATOM','phrase',2,'p_expression_phrase','parser.py',123), + ('phrase -> phrase DOT_ATOM','phrase',2,'p_expression_phrase','parser.py',124), + ('phrase -> phrase DOT','phrase',2,'p_expression_phrase','parser.py',125), + ('phrase -> phrase quoted_string','phrase',2,'p_expression_phrase','parser.py',126), + ('phrase -> ATOM','phrase',1,'p_expression_phrase','parser.py',127), + ('phrase -> DOT_ATOM','phrase',1,'p_expression_phrase','parser.py',128), + ('phrase -> DOT','phrase',1,'p_expression_phrase','parser.py',129), + ('phrase -> quoted_string','phrase',1,'p_expression_phrase','parser.py',130), + ('ofwsp -> fwsp comment fwsp','ofwsp',3,'p_expression_ofwsp','parser.py',139), + ('ofwsp -> fwsp comment','ofwsp',2,'p_expression_ofwsp','parser.py',140), + ('ofwsp -> comment fwsp','ofwsp',2,'p_expression_ofwsp','parser.py',141), + ('ofwsp -> comment','ofwsp',1,'p_expression_ofwsp','parser.py',142), + ('ofwsp -> fwsp','ofwsp',1,'p_expression_ofwsp','parser.py',143), + ('ofwsp -> ','ofwsp',0,'p_expression_ofwsp','parser.py',144), + ('fwsp -> FWSP','fwsp',1,'p_expression_fwsp','parser.py',148), +] diff --git a/flanker/addresslib/_parser/mailbox_or_url_parsetab.py b/flanker/addresslib/_parser/mailbox_or_url_parsetab.py new file mode 100644 index 00000000..f738e719 --- /dev/null +++ b/flanker/addresslib/_parser/mailbox_or_url_parsetab.py @@ -0,0 +1,90 @@ + +# mailbox_or_url_parsetab.py +# This file is automatically generated. Do not edit. +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'mailbox_or_urlFWSP AT DOT COMMA SEMICOLON LANGLE RANGLE ATOM DOT_ATOM LBRACKET RBRACKET DTEXT DQUOTE QTEXT QPAIR LPAREN RPAREN CTEXT URLmailbox_or_url_list : mailbox_or_url_list delim mailbox_or_url\n | mailbox_or_url_list delim\n | mailbox_or_urldelim : delim fwsp COMMA\n | delim fwsp SEMICOLON\n | COMMA\n | SEMICOLONmailbox_or_url : mailbox\n | urlurl : ofwsp URL ofwspmailbox : addr_spec\n | angle_addr\n | name_addrname_addr : ofwsp phrase angle_addrangle_addr : ofwsp LANGLE addr_spec RANGLE ofwspaddr_spec : ofwsp local_part AT domain ofwsplocal_part : DOT_ATOM\n | ATOM\n | quoted_stringdomain : DOT_ATOM\n | ATOM\n | domain_literalquoted_string : DQUOTE quoted_string_text DQUOTE\n | DQUOTE DQUOTEquoted_string_text : quoted_string_text QTEXT\n | quoted_string_text QPAIR\n | quoted_string_text fwsp\n | QTEXT\n | QPAIR\n | fwspdomain_literal : LBRACKET domain_literal_text RBRACKET\n | LBRACKET RBRACKETdomain_literal_text : domain_literal_text DTEXT\n | domain_literal_text fwsp\n | DTEXT\n | fwspcomment : LPAREN comment_text RPAREN\n | LPAREN RPARENcomment_text : comment_text CTEXT\n | comment_text fwsp\n | CTEXT\n | fwspphrase : phrase fwsp ATOM\n | phrase fwsp DOT_ATOM\n | phrase fwsp DOT\n | phrase fwsp quoted_string\n | phrase ATOM\n | phrase DOT_ATOM\n | phrase DOT\n | phrase quoted_string\n | ATOM\n | DOT_ATOM\n | DOT\n | quoted_stringofwsp : fwsp comment fwsp\n | fwsp comment\n | comment fwsp\n | comment\n | fwsp\n |fwsp : FWSP' + +_lr_action_items = {'FWSP':([0,2,7,11,12,14,15,17,18,19,20,21,22,23,24,25,26,32,33,34,35,36,40,41,42,43,44,45,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,69,70,71,72,],[7,7,-61,7,7,7,7,-51,7,-52,7,-54,-53,-42,7,-38,-41,-30,-29,-28,-24,7,-48,-47,-50,-49,-40,-37,-39,7,7,7,-20,-21,-22,-27,-26,-25,-23,-44,-43,-46,-45,-36,-35,7,-32,-34,-33,-31,]),'LANGLE':([0,1,2,4,7,12,13,17,19,20,21,22,25,27,35,37,38,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,14,-61,-56,-57,-51,-52,-60,-54,-53,-38,-55,-24,-59,14,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'QPAIR':([7,18,32,33,34,36,56,57,58,],[-61,33,-30,-29,-28,57,-27,-26,-25,]),'URL':([0,1,2,4,7,12,13,25,27,45,],[-60,-59,-58,15,-61,-56,-57,-38,-55,-37,]),'QTEXT':([7,18,32,33,34,36,56,57,58,],[-61,34,-30,-29,-28,58,-27,-26,-25,]),'DTEXT':([7,52,66,67,68,70,71,],[-61,67,-36,-35,71,-34,-33,]),'DQUOTE':([0,1,2,4,7,12,13,14,17,18,19,20,21,22,25,27,28,32,33,34,35,36,37,40,41,42,43,45,56,57,58,59,60,61,62,63,],[-60,-59,-58,18,-61,-56,-57,-60,-51,35,-52,18,-54,-53,-38,-55,18,-30,-29,-28,-24,59,18,-48,-47,-50,-49,-37,-27,-26,-25,-23,-44,-43,-46,-45,]),'LBRACKET':([31,],[52,]),'DOT_ATOM':([0,1,2,4,7,12,13,14,17,19,20,21,22,25,27,28,31,35,37,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,19,-61,-56,-57,-60,-51,-52,40,-54,-53,-38,-55,47,53,-24,60,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'RPAREN':([7,11,23,24,26,44,46,],[-61,25,-42,45,-41,-40,-39,]),'AT':([16,17,19,21,35,47,48,49,59,],[31,-18,-17,-19,-24,-17,-18,-19,-23,]),'LPAREN':([0,1,7,14,15,17,19,20,21,22,35,37,40,41,42,43,50,51,53,54,55,59,60,61,62,63,69,72,],[11,11,-61,11,11,-51,-52,11,-54,-53,-24,11,-48,-47,-50,-49,11,11,-20,-21,-22,-23,-44,-43,-46,-45,-32,-31,]),'ATOM':([0,1,2,4,7,12,13,14,17,19,20,21,22,25,27,28,31,35,37,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,17,-61,-56,-57,-60,-51,-52,41,-54,-53,-38,-55,48,54,-24,61,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'RANGLE':([1,2,7,12,13,25,27,29,45,51,53,54,55,65,69,72,],[-59,-58,-61,-56,-57,-38,-55,50,-37,-60,-20,-21,-22,-16,-32,-31,]),'RBRACKET':([7,52,66,67,68,70,71,],[-61,69,-36,-35,72,-34,-33,]),'CTEXT':([7,11,23,24,26,44,46,],[-61,26,-42,46,-41,-40,-39,]),'DOT':([0,1,2,4,7,12,13,17,19,20,21,22,25,27,35,37,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,22,-61,-56,-57,-51,-52,43,-54,-53,-38,-55,-24,63,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'$end':([1,2,3,5,6,7,8,9,10,12,13,15,25,27,30,39,45,50,51,53,54,55,64,65,69,72,],[-59,-58,-13,-12,0,-61,-8,-9,-11,-56,-57,-60,-38,-55,-10,-14,-37,-60,-60,-20,-21,-22,-15,-16,-32,-31,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'fwsp':([0,2,11,12,14,15,18,20,24,36,50,51,52,68,],[1,13,23,27,1,1,32,37,44,56,1,1,66,70,]),'comment':([0,1,14,15,20,37,50,51,],[2,12,2,2,2,12,2,2,]),'domain':([31,],[51,]),'comment_text':([11,],[24,]),'name_addr':([0,],[3,]),'ofwsp':([0,14,15,20,50,51,],[4,28,30,38,64,65,]),'angle_addr':([0,20,],[5,39,]),'mailbox_or_url':([0,],[6,]),'local_part':([4,28,],[16,16,]),'domain_literal_text':([52,],[68,]),'mailbox':([0,],[8,]),'quoted_string_text':([18,],[36,]),'url':([0,],[9,]),'addr_spec':([0,14,],[10,29,]),'phrase':([4,],[20,]),'quoted_string':([4,20,28,37,],[21,42,49,62,]),'domain_literal':([31,],[55,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> mailbox_or_url","S'",1,None,None,None), + ('mailbox_or_url_list -> mailbox_or_url_list delim mailbox_or_url','mailbox_or_url_list',3,'p_expression_mailbox_or_url_list','parser.py',19), + ('mailbox_or_url_list -> mailbox_or_url_list delim','mailbox_or_url_list',2,'p_expression_mailbox_or_url_list','parser.py',20), + ('mailbox_or_url_list -> mailbox_or_url','mailbox_or_url_list',1,'p_expression_mailbox_or_url_list','parser.py',21), + ('delim -> delim fwsp COMMA','delim',3,'p_delim','parser.py',30), + ('delim -> delim fwsp SEMICOLON','delim',3,'p_delim','parser.py',31), + ('delim -> COMMA','delim',1,'p_delim','parser.py',32), + ('delim -> SEMICOLON','delim',1,'p_delim','parser.py',33), + ('mailbox_or_url -> mailbox','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',36), + ('mailbox_or_url -> url','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',37), + ('url -> ofwsp URL ofwsp','url',3,'p_expression_url','parser.py',41), + ('mailbox -> addr_spec','mailbox',1,'p_expression_mailbox','parser.py',45), + ('mailbox -> angle_addr','mailbox',1,'p_expression_mailbox','parser.py',46), + ('mailbox -> name_addr','mailbox',1,'p_expression_mailbox','parser.py',47), + ('name_addr -> ofwsp phrase angle_addr','name_addr',3,'p_expression_name_addr','parser.py',51), + ('angle_addr -> ofwsp LANGLE addr_spec RANGLE ofwsp','angle_addr',5,'p_expression_angle_addr','parser.py',55), + ('addr_spec -> ofwsp local_part AT domain ofwsp','addr_spec',5,'p_expression_addr_spec','parser.py',59), + ('local_part -> DOT_ATOM','local_part',1,'p_expression_local_part','parser.py',63), + ('local_part -> ATOM','local_part',1,'p_expression_local_part','parser.py',64), + ('local_part -> quoted_string','local_part',1,'p_expression_local_part','parser.py',65), + ('domain -> DOT_ATOM','domain',1,'p_expression_domain','parser.py',69), + ('domain -> ATOM','domain',1,'p_expression_domain','parser.py',70), + ('domain -> domain_literal','domain',1,'p_expression_domain','parser.py',71), + ('quoted_string -> DQUOTE quoted_string_text DQUOTE','quoted_string',3,'p_expression_quoted_string','parser.py',75), + ('quoted_string -> DQUOTE DQUOTE','quoted_string',2,'p_expression_quoted_string','parser.py',76), + ('quoted_string_text -> quoted_string_text QTEXT','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',83), + ('quoted_string_text -> quoted_string_text QPAIR','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',84), + ('quoted_string_text -> quoted_string_text fwsp','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',85), + ('quoted_string_text -> QTEXT','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',86), + ('quoted_string_text -> QPAIR','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',87), + ('quoted_string_text -> fwsp','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',88), + ('domain_literal -> LBRACKET domain_literal_text RBRACKET','domain_literal',3,'p_expression_domain_literal','parser.py',92), + ('domain_literal -> LBRACKET RBRACKET','domain_literal',2,'p_expression_domain_literal','parser.py',93), + ('domain_literal_text -> domain_literal_text DTEXT','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',100), + ('domain_literal_text -> domain_literal_text fwsp','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',101), + ('domain_literal_text -> DTEXT','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',102), + ('domain_literal_text -> fwsp','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',103), + ('comment -> LPAREN comment_text RPAREN','comment',3,'p_expression_comment','parser.py',107), + ('comment -> LPAREN RPAREN','comment',2,'p_expression_comment','parser.py',108), + ('comment_text -> comment_text CTEXT','comment_text',2,'p_expression_comment_text','parser.py',112), + ('comment_text -> comment_text fwsp','comment_text',2,'p_expression_comment_text','parser.py',113), + ('comment_text -> CTEXT','comment_text',1,'p_expression_comment_text','parser.py',114), + ('comment_text -> fwsp','comment_text',1,'p_expression_comment_text','parser.py',115), + ('phrase -> phrase fwsp ATOM','phrase',3,'p_expression_phrase','parser.py',119), + ('phrase -> phrase fwsp DOT_ATOM','phrase',3,'p_expression_phrase','parser.py',120), + ('phrase -> phrase fwsp DOT','phrase',3,'p_expression_phrase','parser.py',121), + ('phrase -> phrase fwsp quoted_string','phrase',3,'p_expression_phrase','parser.py',122), + ('phrase -> phrase ATOM','phrase',2,'p_expression_phrase','parser.py',123), + ('phrase -> phrase DOT_ATOM','phrase',2,'p_expression_phrase','parser.py',124), + ('phrase -> phrase DOT','phrase',2,'p_expression_phrase','parser.py',125), + ('phrase -> phrase quoted_string','phrase',2,'p_expression_phrase','parser.py',126), + ('phrase -> ATOM','phrase',1,'p_expression_phrase','parser.py',127), + ('phrase -> DOT_ATOM','phrase',1,'p_expression_phrase','parser.py',128), + ('phrase -> DOT','phrase',1,'p_expression_phrase','parser.py',129), + ('phrase -> quoted_string','phrase',1,'p_expression_phrase','parser.py',130), + ('ofwsp -> fwsp comment fwsp','ofwsp',3,'p_expression_ofwsp','parser.py',139), + ('ofwsp -> fwsp comment','ofwsp',2,'p_expression_ofwsp','parser.py',140), + ('ofwsp -> comment fwsp','ofwsp',2,'p_expression_ofwsp','parser.py',141), + ('ofwsp -> comment','ofwsp',1,'p_expression_ofwsp','parser.py',142), + ('ofwsp -> fwsp','ofwsp',1,'p_expression_ofwsp','parser.py',143), + ('ofwsp -> ','ofwsp',0,'p_expression_ofwsp','parser.py',144), + ('fwsp -> FWSP','fwsp',1,'p_expression_fwsp','parser.py',148), +] diff --git a/flanker/addresslib/_parser/mailbox_parsetab.py b/flanker/addresslib/_parser/mailbox_parsetab.py new file mode 100644 index 00000000..0a2def0f --- /dev/null +++ b/flanker/addresslib/_parser/mailbox_parsetab.py @@ -0,0 +1,90 @@ + +# mailbox_parsetab.py +# This file is automatically generated. Do not edit. +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'mailboxFWSP AT DOT COMMA SEMICOLON LANGLE RANGLE ATOM DOT_ATOM LBRACKET RBRACKET DTEXT DQUOTE QTEXT QPAIR LPAREN RPAREN CTEXT URLmailbox_or_url_list : mailbox_or_url_list delim mailbox_or_url\n | mailbox_or_url_list delim\n | mailbox_or_urldelim : delim fwsp COMMA\n | delim fwsp SEMICOLON\n | COMMA\n | SEMICOLONmailbox_or_url : mailbox\n | urlurl : ofwsp URL ofwspmailbox : addr_spec\n | angle_addr\n | name_addrname_addr : ofwsp phrase angle_addrangle_addr : ofwsp LANGLE addr_spec RANGLE ofwspaddr_spec : ofwsp local_part AT domain ofwsplocal_part : DOT_ATOM\n | ATOM\n | quoted_stringdomain : DOT_ATOM\n | ATOM\n | domain_literalquoted_string : DQUOTE quoted_string_text DQUOTE\n | DQUOTE DQUOTEquoted_string_text : quoted_string_text QTEXT\n | quoted_string_text QPAIR\n | quoted_string_text fwsp\n | QTEXT\n | QPAIR\n | fwspdomain_literal : LBRACKET domain_literal_text RBRACKET\n | LBRACKET RBRACKETdomain_literal_text : domain_literal_text DTEXT\n | domain_literal_text fwsp\n | DTEXT\n | fwspcomment : LPAREN comment_text RPAREN\n | LPAREN RPARENcomment_text : comment_text CTEXT\n | comment_text fwsp\n | CTEXT\n | fwspphrase : phrase fwsp ATOM\n | phrase fwsp DOT_ATOM\n | phrase fwsp DOT\n | phrase fwsp quoted_string\n | phrase ATOM\n | phrase DOT_ATOM\n | phrase DOT\n | phrase quoted_string\n | ATOM\n | DOT_ATOM\n | DOT\n | quoted_stringofwsp : fwsp comment fwsp\n | fwsp comment\n | comment fwsp\n | comment\n | fwsp\n |fwsp : FWSP' + +_lr_action_items = {'FWSP':([0,2,6,9,10,12,14,15,16,17,18,19,20,21,22,23,28,29,30,31,32,36,37,38,39,40,41,42,46,47,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,],[6,6,-61,6,6,6,-51,6,-52,6,-54,-53,-42,6,-38,-41,-30,-29,-28,-24,6,-48,-47,-50,-49,-40,-37,-39,6,6,6,-20,-21,-22,-27,-26,-25,-23,-44,-43,-46,-45,-36,-35,6,-32,-34,-33,-31,]),'LANGLE':([0,1,2,4,6,10,11,14,16,17,18,19,22,24,31,33,34,36,37,38,39,41,55,56,57,58,59,],[-60,-59,-58,12,-61,-56,-57,-51,-52,-60,-54,-53,-38,-55,-24,-59,12,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'RPAREN':([6,9,20,21,23,40,42,],[-61,22,-42,41,-41,-40,-39,]),'QTEXT':([6,15,28,29,30,32,52,53,54,],[-61,30,-30,-29,-28,54,-27,-26,-25,]),'DTEXT':([6,48,62,63,64,66,67,],[-61,63,-36,-35,67,-34,-33,]),'DQUOTE':([0,1,2,4,6,10,11,12,14,15,16,17,18,19,22,24,25,28,29,30,31,32,33,36,37,38,39,41,52,53,54,55,56,57,58,59,],[-60,-59,-58,15,-61,-56,-57,-60,-51,31,-52,15,-54,-53,-38,-55,15,-30,-29,-28,-24,55,15,-48,-47,-50,-49,-37,-27,-26,-25,-23,-44,-43,-46,-45,]),'LBRACKET':([27,],[48,]),'QPAIR':([6,15,28,29,30,32,52,53,54,],[-61,29,-30,-29,-28,53,-27,-26,-25,]),'DOT_ATOM':([0,1,2,4,6,10,11,12,14,16,17,18,19,22,24,25,27,31,33,36,37,38,39,41,55,56,57,58,59,],[-60,-59,-58,16,-61,-56,-57,-60,-51,-52,36,-54,-53,-38,-55,43,49,-24,56,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'AT':([13,14,16,18,31,43,44,45,55,],[27,-18,-17,-19,-24,-17,-18,-19,-23,]),'LPAREN':([0,1,6,12,14,16,17,18,19,31,33,36,37,38,39,46,47,49,50,51,55,56,57,58,59,65,68,],[9,9,-61,9,-51,-52,9,-54,-53,-24,9,-48,-47,-50,-49,9,9,-20,-21,-22,-23,-44,-43,-46,-45,-32,-31,]),'ATOM':([0,1,2,4,6,10,11,12,14,16,17,18,19,22,24,25,27,31,33,36,37,38,39,41,55,56,57,58,59,],[-60,-59,-58,14,-61,-56,-57,-60,-51,-52,37,-54,-53,-38,-55,44,50,-24,57,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'RANGLE':([1,2,6,10,11,22,24,26,41,47,49,50,51,61,65,68,],[-59,-58,-61,-56,-57,-38,-55,46,-37,-60,-20,-21,-22,-16,-32,-31,]),'RBRACKET':([6,48,62,63,64,66,67,],[-61,65,-36,-35,68,-34,-33,]),'CTEXT':([6,9,20,21,23,40,42,],[-61,23,-42,42,-41,-40,-39,]),'DOT':([0,1,2,4,6,10,11,14,16,17,18,19,22,24,31,33,36,37,38,39,41,55,56,57,58,59,],[-60,-59,-58,19,-61,-56,-57,-51,-52,39,-54,-53,-38,-55,-24,59,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'$end':([1,2,3,5,6,7,8,10,11,22,24,35,41,46,47,49,50,51,60,61,65,68,],[-59,-58,-13,-12,-61,0,-11,-56,-57,-38,-55,-14,-37,-60,-60,-20,-21,-22,-15,-16,-32,-31,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'fwsp':([0,2,9,10,12,15,17,21,32,46,47,48,64,],[1,11,20,24,1,28,33,40,52,1,1,62,66,]),'comment':([0,1,12,17,33,46,47,],[2,10,2,2,10,2,2,]),'domain':([27,],[47,]),'comment_text':([9,],[21,]),'name_addr':([0,],[3,]),'ofwsp':([0,12,17,46,47,],[4,25,34,60,61,]),'angle_addr':([0,17,],[5,35,]),'local_part':([4,25,],[13,13,]),'mailbox':([0,],[7,]),'quoted_string_text':([15,],[32,]),'domain_literal_text':([48,],[64,]),'addr_spec':([0,12,],[8,26,]),'phrase':([4,],[17,]),'quoted_string':([4,17,25,33,],[18,38,45,58,]),'domain_literal':([27,],[51,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> mailbox","S'",1,None,None,None), + ('mailbox_or_url_list -> mailbox_or_url_list delim mailbox_or_url','mailbox_or_url_list',3,'p_expression_mailbox_or_url_list','parser.py',19), + ('mailbox_or_url_list -> mailbox_or_url_list delim','mailbox_or_url_list',2,'p_expression_mailbox_or_url_list','parser.py',20), + ('mailbox_or_url_list -> mailbox_or_url','mailbox_or_url_list',1,'p_expression_mailbox_or_url_list','parser.py',21), + ('delim -> delim fwsp COMMA','delim',3,'p_delim','parser.py',30), + ('delim -> delim fwsp SEMICOLON','delim',3,'p_delim','parser.py',31), + ('delim -> COMMA','delim',1,'p_delim','parser.py',32), + ('delim -> SEMICOLON','delim',1,'p_delim','parser.py',33), + ('mailbox_or_url -> mailbox','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',36), + ('mailbox_or_url -> url','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',37), + ('url -> ofwsp URL ofwsp','url',3,'p_expression_url','parser.py',41), + ('mailbox -> addr_spec','mailbox',1,'p_expression_mailbox','parser.py',45), + ('mailbox -> angle_addr','mailbox',1,'p_expression_mailbox','parser.py',46), + ('mailbox -> name_addr','mailbox',1,'p_expression_mailbox','parser.py',47), + ('name_addr -> ofwsp phrase angle_addr','name_addr',3,'p_expression_name_addr','parser.py',51), + ('angle_addr -> ofwsp LANGLE addr_spec RANGLE ofwsp','angle_addr',5,'p_expression_angle_addr','parser.py',55), + ('addr_spec -> ofwsp local_part AT domain ofwsp','addr_spec',5,'p_expression_addr_spec','parser.py',59), + ('local_part -> DOT_ATOM','local_part',1,'p_expression_local_part','parser.py',63), + ('local_part -> ATOM','local_part',1,'p_expression_local_part','parser.py',64), + ('local_part -> quoted_string','local_part',1,'p_expression_local_part','parser.py',65), + ('domain -> DOT_ATOM','domain',1,'p_expression_domain','parser.py',69), + ('domain -> ATOM','domain',1,'p_expression_domain','parser.py',70), + ('domain -> domain_literal','domain',1,'p_expression_domain','parser.py',71), + ('quoted_string -> DQUOTE quoted_string_text DQUOTE','quoted_string',3,'p_expression_quoted_string','parser.py',75), + ('quoted_string -> DQUOTE DQUOTE','quoted_string',2,'p_expression_quoted_string','parser.py',76), + ('quoted_string_text -> quoted_string_text QTEXT','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',83), + ('quoted_string_text -> quoted_string_text QPAIR','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',84), + ('quoted_string_text -> quoted_string_text fwsp','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',85), + ('quoted_string_text -> QTEXT','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',86), + ('quoted_string_text -> QPAIR','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',87), + ('quoted_string_text -> fwsp','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',88), + ('domain_literal -> LBRACKET domain_literal_text RBRACKET','domain_literal',3,'p_expression_domain_literal','parser.py',92), + ('domain_literal -> LBRACKET RBRACKET','domain_literal',2,'p_expression_domain_literal','parser.py',93), + ('domain_literal_text -> domain_literal_text DTEXT','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',100), + ('domain_literal_text -> domain_literal_text fwsp','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',101), + ('domain_literal_text -> DTEXT','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',102), + ('domain_literal_text -> fwsp','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',103), + ('comment -> LPAREN comment_text RPAREN','comment',3,'p_expression_comment','parser.py',107), + ('comment -> LPAREN RPAREN','comment',2,'p_expression_comment','parser.py',108), + ('comment_text -> comment_text CTEXT','comment_text',2,'p_expression_comment_text','parser.py',112), + ('comment_text -> comment_text fwsp','comment_text',2,'p_expression_comment_text','parser.py',113), + ('comment_text -> CTEXT','comment_text',1,'p_expression_comment_text','parser.py',114), + ('comment_text -> fwsp','comment_text',1,'p_expression_comment_text','parser.py',115), + ('phrase -> phrase fwsp ATOM','phrase',3,'p_expression_phrase','parser.py',119), + ('phrase -> phrase fwsp DOT_ATOM','phrase',3,'p_expression_phrase','parser.py',120), + ('phrase -> phrase fwsp DOT','phrase',3,'p_expression_phrase','parser.py',121), + ('phrase -> phrase fwsp quoted_string','phrase',3,'p_expression_phrase','parser.py',122), + ('phrase -> phrase ATOM','phrase',2,'p_expression_phrase','parser.py',123), + ('phrase -> phrase DOT_ATOM','phrase',2,'p_expression_phrase','parser.py',124), + ('phrase -> phrase DOT','phrase',2,'p_expression_phrase','parser.py',125), + ('phrase -> phrase quoted_string','phrase',2,'p_expression_phrase','parser.py',126), + ('phrase -> ATOM','phrase',1,'p_expression_phrase','parser.py',127), + ('phrase -> DOT_ATOM','phrase',1,'p_expression_phrase','parser.py',128), + ('phrase -> DOT','phrase',1,'p_expression_phrase','parser.py',129), + ('phrase -> quoted_string','phrase',1,'p_expression_phrase','parser.py',130), + ('ofwsp -> fwsp comment fwsp','ofwsp',3,'p_expression_ofwsp','parser.py',139), + ('ofwsp -> fwsp comment','ofwsp',2,'p_expression_ofwsp','parser.py',140), + ('ofwsp -> comment fwsp','ofwsp',2,'p_expression_ofwsp','parser.py',141), + ('ofwsp -> comment','ofwsp',1,'p_expression_ofwsp','parser.py',142), + ('ofwsp -> fwsp','ofwsp',1,'p_expression_ofwsp','parser.py',143), + ('ofwsp -> ','ofwsp',0,'p_expression_ofwsp','parser.py',144), + ('fwsp -> FWSP','fwsp',1,'p_expression_fwsp','parser.py',148), +] diff --git a/flanker/addresslib/_parser/parser.py b/flanker/addresslib/_parser/parser.py index bf77bc80..d1a6593e 100644 --- a/flanker/addresslib/_parser/parser.py +++ b/flanker/addresslib/_parser/parser.py @@ -5,9 +5,7 @@ from flanker.addresslib._parser.lexer import lexer, tokens -logging.basicConfig() log = logging.getLogger(__name__) -log.setLevel(logging.INFO) Mailbox = namedtuple('Mailbox', ['display_name', 'local_part', 'domain']) Url = namedtuple('Url', ['address']) @@ -157,26 +155,30 @@ def p_error(p): # Build the parsers - -log.info('building mailbox parser') -mailbox_parser = yacc.yacc( - start='mailbox', errorlog=log) - -log.info('building addr_spec parser') -addr_spec_parser = yacc.yacc( - start='addr_spec', errorlog=log) - -log.info('building url parser') -url_parser = yacc.yacc( - start='url', errorlog=log) - -log.info('building mailbox_or_url parser') -mailbox_or_url_parser = yacc.yacc( - start='mailbox_or_url', errorlog=log) - -log.info('building mailbox_or_url_list parser') -mailbox_or_url_list_parser = yacc.yacc( - start='mailbox_or_url_list', errorlog=log) +log.debug('building mailbox parser') +mailbox_parser = yacc.yacc(start='mailbox', + errorlog=log, + tabmodule='mailbox_parsetab') + +log.debug('building addr_spec parser') +addr_spec_parser = yacc.yacc(start='addr_spec', + errorlog=log, + tabmodule='addr_spec_parsetab') + +log.debug('building url parser') +url_parser = yacc.yacc(start='url', + errorlog=log, + tabmodule='url_parsetab') + +log.debug('building mailbox_or_url parser') +mailbox_or_url_parser = yacc.yacc(start='mailbox_or_url', + errorlog=log, + tabmodule='mailbox_or_url_parsetab') + +log.debug('building mailbox_or_url_list parser') +mailbox_or_url_list_parser = yacc.yacc(start='mailbox_or_url_list', + errorlog=log, + tabmodule='mailbox_or_url_list_parsetab') # Interactive prompt for easy debugging diff --git a/flanker/addresslib/_parser/url_parsetab.py b/flanker/addresslib/_parser/url_parsetab.py new file mode 100644 index 00000000..9fb61a83 --- /dev/null +++ b/flanker/addresslib/_parser/url_parsetab.py @@ -0,0 +1,90 @@ + +# url_parsetab.py +# This file is automatically generated. Do not edit. +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'urlFWSP AT DOT COMMA SEMICOLON LANGLE RANGLE ATOM DOT_ATOM LBRACKET RBRACKET DTEXT DQUOTE QTEXT QPAIR LPAREN RPAREN CTEXT URLmailbox_or_url_list : mailbox_or_url_list delim mailbox_or_url\n | mailbox_or_url_list delim\n | mailbox_or_urldelim : delim fwsp COMMA\n | delim fwsp SEMICOLON\n | COMMA\n | SEMICOLONmailbox_or_url : mailbox\n | urlurl : ofwsp URL ofwspmailbox : addr_spec\n | angle_addr\n | name_addrname_addr : ofwsp phrase angle_addrangle_addr : ofwsp LANGLE addr_spec RANGLE ofwspaddr_spec : ofwsp local_part AT domain ofwsplocal_part : DOT_ATOM\n | ATOM\n | quoted_stringdomain : DOT_ATOM\n | ATOM\n | domain_literalquoted_string : DQUOTE quoted_string_text DQUOTE\n | DQUOTE DQUOTEquoted_string_text : quoted_string_text QTEXT\n | quoted_string_text QPAIR\n | quoted_string_text fwsp\n | QTEXT\n | QPAIR\n | fwspdomain_literal : LBRACKET domain_literal_text RBRACKET\n | LBRACKET RBRACKETdomain_literal_text : domain_literal_text DTEXT\n | domain_literal_text fwsp\n | DTEXT\n | fwspcomment : LPAREN comment_text RPAREN\n | LPAREN RPARENcomment_text : comment_text CTEXT\n | comment_text fwsp\n | CTEXT\n | fwspphrase : phrase fwsp ATOM\n | phrase fwsp DOT_ATOM\n | phrase fwsp DOT\n | phrase fwsp quoted_string\n | phrase ATOM\n | phrase DOT_ATOM\n | phrase DOT\n | phrase quoted_string\n | ATOM\n | DOT_ATOM\n | DOT\n | quoted_stringofwsp : fwsp comment fwsp\n | fwsp comment\n | comment fwsp\n | comment\n | fwsp\n |fwsp : FWSP' + +_lr_action_items = {'FWSP':([0,2,5,6,7,9,10,11,12,13,16,17,18,],[5,5,-61,5,5,5,-42,5,-38,-41,-40,-37,-39,]),'RPAREN':([5,6,10,11,13,16,18,],[-61,12,-42,17,-41,-40,-39,]),'URL':([0,1,2,3,5,7,8,12,14,17,],[-60,-59,-58,9,-61,-56,-57,-38,-55,-37,]),'LPAREN':([0,1,5,9,],[6,6,-61,6,]),'CTEXT':([5,6,10,11,13,16,18,],[-61,13,-42,18,-41,-40,-39,]),'$end':([1,2,4,5,7,8,9,12,14,15,17,],[-59,-58,0,-61,-56,-57,-60,-38,-55,-10,-37,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'url':([0,],[4,]),'fwsp':([0,2,6,7,9,11,],[1,8,10,14,1,16,]),'comment_text':([6,],[11,]),'comment':([0,1,9,],[2,7,2,]),'ofwsp':([0,9,],[3,15,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> url","S'",1,None,None,None), + ('mailbox_or_url_list -> mailbox_or_url_list delim mailbox_or_url','mailbox_or_url_list',3,'p_expression_mailbox_or_url_list','parser.py',19), + ('mailbox_or_url_list -> mailbox_or_url_list delim','mailbox_or_url_list',2,'p_expression_mailbox_or_url_list','parser.py',20), + ('mailbox_or_url_list -> mailbox_or_url','mailbox_or_url_list',1,'p_expression_mailbox_or_url_list','parser.py',21), + ('delim -> delim fwsp COMMA','delim',3,'p_delim','parser.py',30), + ('delim -> delim fwsp SEMICOLON','delim',3,'p_delim','parser.py',31), + ('delim -> COMMA','delim',1,'p_delim','parser.py',32), + ('delim -> SEMICOLON','delim',1,'p_delim','parser.py',33), + ('mailbox_or_url -> mailbox','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',36), + ('mailbox_or_url -> url','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',37), + ('url -> ofwsp URL ofwsp','url',3,'p_expression_url','parser.py',41), + ('mailbox -> addr_spec','mailbox',1,'p_expression_mailbox','parser.py',45), + ('mailbox -> angle_addr','mailbox',1,'p_expression_mailbox','parser.py',46), + ('mailbox -> name_addr','mailbox',1,'p_expression_mailbox','parser.py',47), + ('name_addr -> ofwsp phrase angle_addr','name_addr',3,'p_expression_name_addr','parser.py',51), + ('angle_addr -> ofwsp LANGLE addr_spec RANGLE ofwsp','angle_addr',5,'p_expression_angle_addr','parser.py',55), + ('addr_spec -> ofwsp local_part AT domain ofwsp','addr_spec',5,'p_expression_addr_spec','parser.py',59), + ('local_part -> DOT_ATOM','local_part',1,'p_expression_local_part','parser.py',63), + ('local_part -> ATOM','local_part',1,'p_expression_local_part','parser.py',64), + ('local_part -> quoted_string','local_part',1,'p_expression_local_part','parser.py',65), + ('domain -> DOT_ATOM','domain',1,'p_expression_domain','parser.py',69), + ('domain -> ATOM','domain',1,'p_expression_domain','parser.py',70), + ('domain -> domain_literal','domain',1,'p_expression_domain','parser.py',71), + ('quoted_string -> DQUOTE quoted_string_text DQUOTE','quoted_string',3,'p_expression_quoted_string','parser.py',75), + ('quoted_string -> DQUOTE DQUOTE','quoted_string',2,'p_expression_quoted_string','parser.py',76), + ('quoted_string_text -> quoted_string_text QTEXT','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',83), + ('quoted_string_text -> quoted_string_text QPAIR','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',84), + ('quoted_string_text -> quoted_string_text fwsp','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',85), + ('quoted_string_text -> QTEXT','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',86), + ('quoted_string_text -> QPAIR','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',87), + ('quoted_string_text -> fwsp','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',88), + ('domain_literal -> LBRACKET domain_literal_text RBRACKET','domain_literal',3,'p_expression_domain_literal','parser.py',92), + ('domain_literal -> LBRACKET RBRACKET','domain_literal',2,'p_expression_domain_literal','parser.py',93), + ('domain_literal_text -> domain_literal_text DTEXT','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',100), + ('domain_literal_text -> domain_literal_text fwsp','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',101), + ('domain_literal_text -> DTEXT','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',102), + ('domain_literal_text -> fwsp','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',103), + ('comment -> LPAREN comment_text RPAREN','comment',3,'p_expression_comment','parser.py',107), + ('comment -> LPAREN RPAREN','comment',2,'p_expression_comment','parser.py',108), + ('comment_text -> comment_text CTEXT','comment_text',2,'p_expression_comment_text','parser.py',112), + ('comment_text -> comment_text fwsp','comment_text',2,'p_expression_comment_text','parser.py',113), + ('comment_text -> CTEXT','comment_text',1,'p_expression_comment_text','parser.py',114), + ('comment_text -> fwsp','comment_text',1,'p_expression_comment_text','parser.py',115), + ('phrase -> phrase fwsp ATOM','phrase',3,'p_expression_phrase','parser.py',119), + ('phrase -> phrase fwsp DOT_ATOM','phrase',3,'p_expression_phrase','parser.py',120), + ('phrase -> phrase fwsp DOT','phrase',3,'p_expression_phrase','parser.py',121), + ('phrase -> phrase fwsp quoted_string','phrase',3,'p_expression_phrase','parser.py',122), + ('phrase -> phrase ATOM','phrase',2,'p_expression_phrase','parser.py',123), + ('phrase -> phrase DOT_ATOM','phrase',2,'p_expression_phrase','parser.py',124), + ('phrase -> phrase DOT','phrase',2,'p_expression_phrase','parser.py',125), + ('phrase -> phrase quoted_string','phrase',2,'p_expression_phrase','parser.py',126), + ('phrase -> ATOM','phrase',1,'p_expression_phrase','parser.py',127), + ('phrase -> DOT_ATOM','phrase',1,'p_expression_phrase','parser.py',128), + ('phrase -> DOT','phrase',1,'p_expression_phrase','parser.py',129), + ('phrase -> quoted_string','phrase',1,'p_expression_phrase','parser.py',130), + ('ofwsp -> fwsp comment fwsp','ofwsp',3,'p_expression_ofwsp','parser.py',139), + ('ofwsp -> fwsp comment','ofwsp',2,'p_expression_ofwsp','parser.py',140), + ('ofwsp -> comment fwsp','ofwsp',2,'p_expression_ofwsp','parser.py',141), + ('ofwsp -> comment','ofwsp',1,'p_expression_ofwsp','parser.py',142), + ('ofwsp -> fwsp','ofwsp',1,'p_expression_ofwsp','parser.py',143), + ('ofwsp -> ','ofwsp',0,'p_expression_ofwsp','parser.py',144), + ('fwsp -> FWSP','fwsp',1,'p_expression_fwsp','parser.py',148), +] diff --git a/flanker/addresslib/parsetab.py b/flanker/addresslib/parsetab.py new file mode 100644 index 00000000..c57bbeba --- /dev/null +++ b/flanker/addresslib/parsetab.py @@ -0,0 +1,90 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'mailbox_or_urlFWSP AT DOT COMMA SEMICOLON LANGLE RANGLE ATOM DOT_ATOM LBRACKET RBRACKET DTEXT DQUOTE QTEXT QPAIR LPAREN RPAREN CTEXT URLmailbox_or_url_list : mailbox_or_url_list delim mailbox_or_url\n | mailbox_or_url_list delim\n | mailbox_or_urldelim : delim fwsp COMMA\n | delim fwsp SEMICOLON\n | COMMA\n | SEMICOLONmailbox_or_url : mailbox\n | urlurl : ofwsp URL ofwspmailbox : addr_spec\n | angle_addr\n | name_addrname_addr : ofwsp phrase angle_addrangle_addr : ofwsp LANGLE addr_spec RANGLE ofwspaddr_spec : ofwsp local_part AT domain ofwsplocal_part : DOT_ATOM\n | ATOM\n | quoted_stringdomain : DOT_ATOM\n | ATOM\n | domain_literalquoted_string : DQUOTE quoted_string_text DQUOTE\n | DQUOTE DQUOTEquoted_string_text : quoted_string_text QTEXT\n | quoted_string_text QPAIR\n | quoted_string_text fwsp\n | QTEXT\n | QPAIR\n | fwspdomain_literal : LBRACKET domain_literal_text RBRACKET\n | LBRACKET RBRACKETdomain_literal_text : domain_literal_text DTEXT\n | domain_literal_text fwsp\n | DTEXT\n | fwspcomment : LPAREN comment_text RPAREN\n | LPAREN RPARENcomment_text : comment_text CTEXT\n | comment_text fwsp\n | CTEXT\n | fwspphrase : phrase fwsp ATOM\n | phrase fwsp DOT_ATOM\n | phrase fwsp DOT\n | phrase fwsp quoted_string\n | phrase ATOM\n | phrase DOT_ATOM\n | phrase DOT\n | phrase quoted_string\n | ATOM\n | DOT_ATOM\n | DOT\n | quoted_stringofwsp : fwsp comment fwsp\n | fwsp comment\n | comment fwsp\n | comment\n | fwsp\n |fwsp : FWSP' + +_lr_action_items = {'FWSP':([0,2,7,11,12,14,15,17,18,19,20,21,22,23,24,25,26,32,33,34,35,36,40,41,42,43,44,45,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,69,70,71,72,],[7,7,-61,7,7,7,7,-51,7,-52,7,-54,-53,-42,7,-38,-41,-30,-29,-28,-24,7,-48,-47,-50,-49,-40,-37,-39,7,7,7,-20,-21,-22,-27,-26,-25,-23,-44,-43,-46,-45,-36,-35,7,-32,-34,-33,-31,]),'LANGLE':([0,1,2,4,7,12,13,17,19,20,21,22,25,27,35,37,38,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,14,-61,-56,-57,-51,-52,-60,-54,-53,-38,-55,-24,-59,14,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'QPAIR':([7,18,32,33,34,36,56,57,58,],[-61,33,-30,-29,-28,57,-27,-26,-25,]),'URL':([0,1,2,4,7,12,13,25,27,45,],[-60,-59,-58,15,-61,-56,-57,-38,-55,-37,]),'QTEXT':([7,18,32,33,34,36,56,57,58,],[-61,34,-30,-29,-28,58,-27,-26,-25,]),'DTEXT':([7,52,66,67,68,70,71,],[-61,67,-36,-35,71,-34,-33,]),'DQUOTE':([0,1,2,4,7,12,13,14,17,18,19,20,21,22,25,27,28,32,33,34,35,36,37,40,41,42,43,45,56,57,58,59,60,61,62,63,],[-60,-59,-58,18,-61,-56,-57,-60,-51,35,-52,18,-54,-53,-38,-55,18,-30,-29,-28,-24,59,18,-48,-47,-50,-49,-37,-27,-26,-25,-23,-44,-43,-46,-45,]),'LBRACKET':([31,],[52,]),'DOT_ATOM':([0,1,2,4,7,12,13,14,17,19,20,21,22,25,27,28,31,35,37,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,19,-61,-56,-57,-60,-51,-52,40,-54,-53,-38,-55,47,53,-24,60,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'RPAREN':([7,11,23,24,26,44,46,],[-61,25,-42,45,-41,-40,-39,]),'AT':([16,17,19,21,35,47,48,49,59,],[31,-18,-17,-19,-24,-17,-18,-19,-23,]),'LPAREN':([0,1,7,14,15,17,19,20,21,22,35,37,40,41,42,43,50,51,53,54,55,59,60,61,62,63,69,72,],[11,11,-61,11,11,-51,-52,11,-54,-53,-24,11,-48,-47,-50,-49,11,11,-20,-21,-22,-23,-44,-43,-46,-45,-32,-31,]),'ATOM':([0,1,2,4,7,12,13,14,17,19,20,21,22,25,27,28,31,35,37,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,17,-61,-56,-57,-60,-51,-52,41,-54,-53,-38,-55,48,54,-24,61,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'RANGLE':([1,2,7,12,13,25,27,29,45,51,53,54,55,65,69,72,],[-59,-58,-61,-56,-57,-38,-55,50,-37,-60,-20,-21,-22,-16,-32,-31,]),'RBRACKET':([7,52,66,67,68,70,71,],[-61,69,-36,-35,72,-34,-33,]),'CTEXT':([7,11,23,24,26,44,46,],[-61,26,-42,46,-41,-40,-39,]),'DOT':([0,1,2,4,7,12,13,17,19,20,21,22,25,27,35,37,40,41,42,43,45,59,60,61,62,63,],[-60,-59,-58,22,-61,-56,-57,-51,-52,43,-54,-53,-38,-55,-24,63,-48,-47,-50,-49,-37,-23,-44,-43,-46,-45,]),'$end':([1,2,3,5,6,7,8,9,10,12,13,15,25,27,30,39,45,50,51,53,54,55,64,65,69,72,],[-59,-58,-13,-12,0,-61,-8,-9,-11,-56,-57,-60,-38,-55,-10,-14,-37,-60,-60,-20,-21,-22,-15,-16,-32,-31,]),} + +_lr_action = {} +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = {} + _lr_action[_x][_k] = _y +del _lr_action_items + +_lr_goto_items = {'fwsp':([0,2,11,12,14,15,18,20,24,36,50,51,52,68,],[1,13,23,27,1,1,32,37,44,56,1,1,66,70,]),'comment':([0,1,14,15,20,37,50,51,],[2,12,2,2,2,12,2,2,]),'domain':([31,],[51,]),'comment_text':([11,],[24,]),'name_addr':([0,],[3,]),'ofwsp':([0,14,15,20,50,51,],[4,28,30,38,64,65,]),'angle_addr':([0,20,],[5,39,]),'mailbox_or_url':([0,],[6,]),'local_part':([4,28,],[16,16,]),'domain_literal_text':([52,],[68,]),'mailbox':([0,],[8,]),'quoted_string_text':([18,],[36,]),'url':([0,],[9,]),'addr_spec':([0,14,],[10,29,]),'phrase':([4,],[20,]),'quoted_string':([4,20,28,37,],[21,42,49,62,]),'domain_literal':([31,],[55,]),} + +_lr_goto = {} +for _k, _v in _lr_goto_items.items(): + for _x, _y in zip(_v[0], _v[1]): + if not _x in _lr_goto: _lr_goto[_x] = {} + _lr_goto[_x][_k] = _y +del _lr_goto_items +_lr_productions = [ + ("S' -> mailbox_or_url","S'",1,None,None,None), + ('mailbox_or_url_list -> mailbox_or_url_list delim mailbox_or_url','mailbox_or_url_list',3,'p_expression_mailbox_or_url_list','parser.py',18), + ('mailbox_or_url_list -> mailbox_or_url_list delim','mailbox_or_url_list',2,'p_expression_mailbox_or_url_list','parser.py',19), + ('mailbox_or_url_list -> mailbox_or_url','mailbox_or_url_list',1,'p_expression_mailbox_or_url_list','parser.py',20), + ('delim -> delim fwsp COMMA','delim',3,'p_delim','parser.py',29), + ('delim -> delim fwsp SEMICOLON','delim',3,'p_delim','parser.py',30), + ('delim -> COMMA','delim',1,'p_delim','parser.py',31), + ('delim -> SEMICOLON','delim',1,'p_delim','parser.py',32), + ('mailbox_or_url -> mailbox','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',35), + ('mailbox_or_url -> url','mailbox_or_url',1,'p_expression_mailbox_or_url','parser.py',36), + ('url -> ofwsp URL ofwsp','url',3,'p_expression_url','parser.py',40), + ('mailbox -> addr_spec','mailbox',1,'p_expression_mailbox','parser.py',44), + ('mailbox -> angle_addr','mailbox',1,'p_expression_mailbox','parser.py',45), + ('mailbox -> name_addr','mailbox',1,'p_expression_mailbox','parser.py',46), + ('name_addr -> ofwsp phrase angle_addr','name_addr',3,'p_expression_name_addr','parser.py',50), + ('angle_addr -> ofwsp LANGLE addr_spec RANGLE ofwsp','angle_addr',5,'p_expression_angle_addr','parser.py',54), + ('addr_spec -> ofwsp local_part AT domain ofwsp','addr_spec',5,'p_expression_addr_spec','parser.py',58), + ('local_part -> DOT_ATOM','local_part',1,'p_expression_local_part','parser.py',62), + ('local_part -> ATOM','local_part',1,'p_expression_local_part','parser.py',63), + ('local_part -> quoted_string','local_part',1,'p_expression_local_part','parser.py',64), + ('domain -> DOT_ATOM','domain',1,'p_expression_domain','parser.py',68), + ('domain -> ATOM','domain',1,'p_expression_domain','parser.py',69), + ('domain -> domain_literal','domain',1,'p_expression_domain','parser.py',70), + ('quoted_string -> DQUOTE quoted_string_text DQUOTE','quoted_string',3,'p_expression_quoted_string','parser.py',74), + ('quoted_string -> DQUOTE DQUOTE','quoted_string',2,'p_expression_quoted_string','parser.py',75), + ('quoted_string_text -> quoted_string_text QTEXT','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',82), + ('quoted_string_text -> quoted_string_text QPAIR','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',83), + ('quoted_string_text -> quoted_string_text fwsp','quoted_string_text',2,'p_expression_quoted_string_text','parser.py',84), + ('quoted_string_text -> QTEXT','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',85), + ('quoted_string_text -> QPAIR','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',86), + ('quoted_string_text -> fwsp','quoted_string_text',1,'p_expression_quoted_string_text','parser.py',87), + ('domain_literal -> LBRACKET domain_literal_text RBRACKET','domain_literal',3,'p_expression_domain_literal','parser.py',91), + ('domain_literal -> LBRACKET RBRACKET','domain_literal',2,'p_expression_domain_literal','parser.py',92), + ('domain_literal_text -> domain_literal_text DTEXT','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',99), + ('domain_literal_text -> domain_literal_text fwsp','domain_literal_text',2,'p_expression_domain_literal_text','parser.py',100), + ('domain_literal_text -> DTEXT','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',101), + ('domain_literal_text -> fwsp','domain_literal_text',1,'p_expression_domain_literal_text','parser.py',102), + ('comment -> LPAREN comment_text RPAREN','comment',3,'p_expression_comment','parser.py',106), + ('comment -> LPAREN RPAREN','comment',2,'p_expression_comment','parser.py',107), + ('comment_text -> comment_text CTEXT','comment_text',2,'p_expression_comment_text','parser.py',111), + ('comment_text -> comment_text fwsp','comment_text',2,'p_expression_comment_text','parser.py',112), + ('comment_text -> CTEXT','comment_text',1,'p_expression_comment_text','parser.py',113), + ('comment_text -> fwsp','comment_text',1,'p_expression_comment_text','parser.py',114), + ('phrase -> phrase fwsp ATOM','phrase',3,'p_expression_phrase','parser.py',118), + ('phrase -> phrase fwsp DOT_ATOM','phrase',3,'p_expression_phrase','parser.py',119), + ('phrase -> phrase fwsp DOT','phrase',3,'p_expression_phrase','parser.py',120), + ('phrase -> phrase fwsp quoted_string','phrase',3,'p_expression_phrase','parser.py',121), + ('phrase -> phrase ATOM','phrase',2,'p_expression_phrase','parser.py',122), + ('phrase -> phrase DOT_ATOM','phrase',2,'p_expression_phrase','parser.py',123), + ('phrase -> phrase DOT','phrase',2,'p_expression_phrase','parser.py',124), + ('phrase -> phrase quoted_string','phrase',2,'p_expression_phrase','parser.py',125), + ('phrase -> ATOM','phrase',1,'p_expression_phrase','parser.py',126), + ('phrase -> DOT_ATOM','phrase',1,'p_expression_phrase','parser.py',127), + ('phrase -> DOT','phrase',1,'p_expression_phrase','parser.py',128), + ('phrase -> quoted_string','phrase',1,'p_expression_phrase','parser.py',129), + ('ofwsp -> fwsp comment fwsp','ofwsp',3,'p_expression_ofwsp','parser.py',138), + ('ofwsp -> fwsp comment','ofwsp',2,'p_expression_ofwsp','parser.py',139), + ('ofwsp -> comment fwsp','ofwsp',2,'p_expression_ofwsp','parser.py',140), + ('ofwsp -> comment','ofwsp',1,'p_expression_ofwsp','parser.py',141), + ('ofwsp -> fwsp','ofwsp',1,'p_expression_ofwsp','parser.py',142), + ('ofwsp -> ','ofwsp',0,'p_expression_ofwsp','parser.py',143), + ('fwsp -> FWSP','fwsp',1,'p_expression_fwsp','parser.py',147), +]