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>