my recursive function call is wrong?

Chang Min Jeon jcm1981 at gmail.com
Sun Aug 16 03:57:41 EDT 2009


I'm trying to write program to translate define macro in 'C'.
And start_parse has return condition that list's length is 0.
At this time return statement invoke start_parse() function.
I can't understand do that.

I'm using Python 2.6.2 in Windows XP

import re
import sys
comment = '''
#if defined (FEATURE_ONENESTED)
#    define PYTHON_POWERED
#    if defined(ANY_LANGUAGE)
#        error
#    endif
#else
#    define FEATURE_NONE
#endif
'''

symbol_table = ['FEATURE_ONENESTED']

valid_area = False

p_define = re.compile('^[\t ]*#[\t ]*define[\t ]+([a-zA-Z0-9_]+)[\t ]*')
p_if = re.compile('^[\t ]*#[\t ]*if[\t
]+defined[\s]*[\(]*([a-zA-Z0-9_]+)[\)]*[\t ]*')
p_elif = re.compile('^[\t ]*#[\t ]*elif[\t ]*')
p_else = re.compile('^[\t ]*#[\t ]*else[\t ]*')
p_endif = re.compile('^[\t ]*#[\t ]*endif[\t ]*')

def start_parse(macro):
    global valid_area
    if len(macro) == 0:
        return

    if valid_area == True:

        if p_else.match(macro[0]):
            valid_area = False
            macro.pop(0)
            start_parse(macro)

        match = p_define.match(macro[0])
        if match:
            symbol_table.append(match.group(1))
            macro.pop(0)
            start_parse(macro)


    match = p_if.match(macro[0])
    if match:
        for symbol in symbol_table:#print match.group(1)
            if match.group(1) == symbol:
                #print match.group(1)
                valid_area = True
            else:
                valid_area = False

    if p_else.match(macro[0]):
        macro.pop(0)
        start_parse(macro)

    match = p_endif.match(macro[0])
    if match:
        valid_area = False

    macro.pop(0)
    start_parse(macro)

if __name__ == '__main__':
    l = comment.splitlines()
    start_parse(l)
    print symbol_table
-- 
CashFlow
To be rich.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20090816/8a05ac1a/attachment.html>


More information about the Python-list mailing list