Package lepl :: Package _test :: Module bug_stalled_parser
[hide private]
[frames] | no frames]

Source Code for Module lepl._test.bug_stalled_parser

 1   
 2  # The contents of this file are subject to the Mozilla Public License 
 3  # (MPL) Version 1.1 (the "License"); you may not use this file except 
 4  # in compliance with the License. You may obtain a copy of the License 
 5  # at http://www.mozilla.org/MPL/ 
 6  # 
 7  # Software distributed under the License is distributed on an "AS IS" 
 8  # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
 9  # the License for the specific language governing rights and 
10  # limitations under the License. 
11  # 
12  # The Original Code is LEPL (http://www.acooke.org/lepl) 
13  # The Initial Developer of the Original Code is Andrew Cooke. 
14  # Portions created by the Initial Developer are Copyright (C) 2009-2010 
15  # Andrew Cooke (andrew@acooke.org). All Rights Reserved. 
16  # 
17  # Alternatively, the contents of this file may be used under the terms 
18  # of the LGPL license (the GNU Lesser General Public License, 
19  # http://www.gnu.org/licenses/lgpl.html), in which case the provisions 
20  # of the LGPL License are applicable instead of those above. 
21  # 
22  # If you wish to allow use of your version of this file only under the 
23  # terms of the LGPL License and not to allow others to use your version 
24  # of this file under the MPL, indicate your decision by deleting the 
25  # provisions above and replace them with the notice and other provisions 
26  # required by the LGPL License.  If you do not delete the provisions 
27  # above, a recipient may use your version of this file under either the 
28  # MPL or the LGPL License. 
29   
30  ''' 
31  Tests for a regexp bug. 
32  ''' 
33   
34  # pylint: disable-msg=W0614, W0401, C0111, R0201 
35  #@PydevCodeAnalysisIgnore 
36   
37   
38  #from logging import basicConfig, DEBUG 
39  from unittest import TestCase 
40   
41  from lepl import * 
42   
43   
44 -class LeftRecursiveTest(TestCase):
45 46 # def test_limited_lookahead(self): 47 # ''' 48 # This stalls because Lookahead consumes nothing. Can we detect this 49 # case? 50 # ''' 51 # #basicConfig(level=DEBUG) 52 # 53 # item = Delayed() 54 # item += item[1:3] | ~Lookahead('x') 55 # 56 # expr = item[:2] & Drop(Eos()) 57 # expr.config.left_memoize() 58 # parser = expr.get_parse_string() 59 # print(parser.matcher.tree()) 60 # 61 # parser('abc') 62 63 # def test_plain_lookahead(self): 64 # ''' 65 # This stalls because Lookahead consumes nothing. Can we detect this 66 # case? 67 # ''' 68 # #basicConfig(level=DEBUG) 69 # 70 # item = Delayed() 71 # item += item[1:] | ~Lookahead('\\') 72 # 73 # expr = item & Drop(Eos()) 74 # expr.config.left_memoize() 75 # parser = expr.get_parse_string() 76 # print(parser.matcher.tree()) 77 # 78 # parser('abc') 79
81 82 item = Delayed() 83 item += item[1:] 84 expr = item & Drop(Eos()) 85 86 expr.config.no_full_first_match() 87 parser = expr.get_parse_string() 88 try: 89 parser('abc') 90 assert False, 'expcted left recursion error' 91 except MemoException: 92 pass 93 expr.config.left_memoize() 94 parser = expr.get_parse_string() 95 parser('abc')
96