I'm trying to write program to translate define macro in 'C'.<br>And start_parse has return condition that list's length is 0.<br>At this time return statement invoke start_parse() function.<br>I can't understand do that.<br>
<br>I'm using Python 2.6.2 in Windows XP<br clear="all"><br>import re<br>import sys<br>comment = '''<br>#if defined (FEATURE_ONENESTED)<br># define PYTHON_POWERED<br># if defined(ANY_LANGUAGE)<br># error<br>
# endif<br>#else<br># define FEATURE_NONE<br>#endif<br>'''<br><br>symbol_table = ['FEATURE_ONENESTED']<br><br>valid_area = False<br><br>p_define = re.compile('^[\t ]*#[\t ]*define[\t ]+([a-zA-Z0-9_]+)[\t ]*')<br>
p_if = re.compile('^[\t ]*#[\t ]*if[\t ]+defined[\s]*[\(]*([a-zA-Z0-9_]+)[\)]*[\t ]*')<br>p_elif = re.compile('^[\t ]*#[\t ]*elif[\t ]*')<br>p_else = re.compile('^[\t ]*#[\t ]*else[\t ]*')<br>p_endif = re.compile('^[\t ]*#[\t ]*endif[\t ]*')<br>
<br>def start_parse(macro):<br> global valid_area<br> if len(macro) == 0:<br> return<br> <br> if valid_area == True:<br><br> if p_else.match(macro[0]):<br> valid_area = False<br> macro.pop(0)<br>
start_parse(macro)<br> <br> match = p_define.match(macro[0])<br> if match:<br> symbol_table.append(match.group(1))<br> macro.pop(0)<br> start_parse(macro)<br>
<br> <br> match = p_if.match(macro[0])<br> if match:<br> for symbol in symbol_table:#print match.group(1)<br> if match.group(1) == symbol:<br> #print match.group(1) <br> valid_area = True<br>
else:<br> valid_area = False<br><br> if p_else.match(macro[0]):<br> macro.pop(0)<br> start_parse(macro)<br><br> match = p_endif.match(macro[0])<br> if match:<br> valid_area = False<br>
<br> macro.pop(0)<br> start_parse(macro)<br><br>if __name__ == '__main__':<br> l = comment.splitlines()<br> start_parse(l)<br> print symbol_table<br>-- <br>CashFlow<br>To be rich.<br>