comparison lineend.py @ 61:82891de09dbf

before splicing new terminator parsing in
author catherine@Elli.myhome.westell.com
date Fri, 20 Jun 2008 20:41:19 -0400
parents 682588392eaf
children 95e239c87010
comparison
equal deleted inserted replaced
60:682588392eaf 61:82891de09dbf
1 import pyparsing, sys, doctest 1 import pyparsing, sys, doctest
2 2
3 pattern = pyparsing.Optional(pyparsing.CharsNotIn(';')) + ';' 3 terminators = (';', 'EOF')
4 pattern.ignore(pyparsing.sglQuotedString) 4
5 pattern.ignore(pyparsing.sglQuotedString) 5 #pattern = pyparsing.Optional(pyparsing.CharsNotIn(terminators)) + pyparsing.oneOf(';')
6 complete_pattern = pyparsing.SkipTo(pyparsing.oneOf(terminators))
7 complete_pattern.ignore(pyparsing.sglQuotedString)
8 complete_pattern.ignore(pyparsing.sglQuotedString)
6 9
7 redirect_pattern = pyparsing.Optional(pyparsing.CharsNotIn('<>')) + pyparsing.oneOf('< >') + pyparsing.Word(pyparsing.printables) 10 redirect_pattern = pyparsing.Optional(pyparsing.CharsNotIn('<>')) + pyparsing.oneOf('< >') + pyparsing.Word(pyparsing.printables)
8 redirect_pattern.ignore(pyparsing.sglQuotedString) 11 redirect_pattern.ignore(pyparsing.sglQuotedString)
9 redirect_pattern.ignore(pyparsing.sglQuotedString) 12 redirect_pattern.ignore(pyparsing.sglQuotedString)
10 13
14 pipe_pattern = pyparsing.Optional(pyparsing.CharsNotIn('|')) + '|' + pyparsing.SkipTo(pyparsing.StringEnd())
15 pipe_pattern.ignore(pyparsing.sglQuotedString)
16 pipe_pattern.ignore(pyparsing.sglQuotedString)
17
11 def parse(txt, mustBeTerminated=False): 18 def parse(txt, mustBeTerminated=False):
12 """ 19 """
13 >>> sorted(parse('select * from dual;', True).items()) 20 >>> sorted(parse('select * from dual;', True).items())
14 [('complete', True), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] 21 [('complete', True), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)]
22 >>> sorted(parse('select * from dual E', True).items())
23 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)]
15 >>> sorted(parse('select * from', True).items()) 24 >>> sorted(parse('select * from', True).items())
16 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)] 25 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)]
17 >>> sorted(parse('select * from dual; > result.txt', True).items()) 26 >>> sorted(parse('select * from dual; > result.txt', True).items())
18 [('complete', True), ('inputFrom', None), ('outputTo', 'result.txt'), ('pipeTo', None)] 27 [('complete', True), ('inputFrom', None), ('outputTo', 'result.txt'), ('pipeTo', None)]
28 >>> sorted(parse("select * from dual where val = 'x > y'", True).items())
29 [('complete', False), ('inputFrom', None), ('outputTo', None), ('pipeTo', None)]
30 >>> sorted(parse('select * from dual; | wc -c', True).items())
31 [('complete', True), ('inputFrom', None), ('outputTo', None), ('pipeTo', 'wc -c')]
19 """ 32 """
20 result = {'complete': not mustBeTerminated, 'inputFrom': None, 'outputTo': None, 'pipeTo': None} 33 result = {'complete': not mustBeTerminated, 'inputFrom': None, 'outputTo': None, 'pipeTo': None}
21 if mustBeTerminated: 34 if mustBeTerminated:
22 try: 35 try:
23 pattern.parseString(txt) 36 complete_pattern.parseString(txt)
24 result['complete'] = True 37 result['complete'] = True
25 except pyparsing.ParseException: 38 except pyparsing.ParseException:
26 pass 39 pass
27 40
28 if result['complete']: 41 if result['complete']:
32 result['outputTo'] = parsed[2] 45 result['outputTo'] = parsed[2]
33 else: 46 else:
34 result['inputFrom'] = parsed[2] 47 result['inputFrom'] = parsed[2]
35 except pyparsing.ParseException: 48 except pyparsing.ParseException:
36 pass 49 pass
50 try:
51 parsed = pipe_pattern.parseString(txt)
52 result['pipeTo'] = parsed[2]
53 except pyparsing.ParseException:
54 pass
55
37 return result 56 return result
38 57
39 if __name__ == '__main__': 58 if __name__ == '__main__':
40 doctest.testmod() 59 doctest.testmod()
41 60