Commit 28d7348f62ae1a37b18d2adc7d675f2c8f117438

Authored by Michał Lenart
1 parent d02556c8

dodana obsługa #else

git-svn-id: svn://svn.nlp.ipipan.waw.pl/morfeusz/morfeusz@159 ff4e3ee1-f430-4e82-ade0-24591c43f1fd
fsabuilder/morfeuszbuilder/segrules/preprocessor.py
... ... @@ -76,7 +76,6 @@ def _processLine(lineNum, line, defines, filename):
76 76 def preprocess(inputLines, defs, filename):
77 77 defines = {}
78 78 ifdefsStack = []
79   - wasElse = False
80 79 for lineNum, line in inputLines:
81 80 if line.startswith('#define'):
82 81 parsedDefine = list(pyparseString(define, lineNum, line, filename))
... ... @@ -91,17 +90,18 @@ def preprocess(inputLines, defs, filename):
91 90 defines[name] = ArgDefine(name, arg, val)
92 91 elif line.startswith('#ifdef'):
93 92 name = pyparseString(ifdef, lineNum, line, filename)[0]
94   -# name = ifdef.parseString(line)[0]
95   - ifdefsStack.append(name)
  93 + ifdefsStack.append((name, True))
96 94 elif line.startswith('#else'):
97   - ifdefsStack.pop()
98   - wasElse = True
  95 + name, isActive = ifdefsStack[-1]
  96 + assert isActive
  97 + ifdefsStack[-1] = name, False
  98 +# ifdefsStack.pop()
99 99 elif line.startswith('#endif'):
100   - if not wasElse:
101   - ifdefsStack.pop()
102   - wasElse = False
  100 + ifdefsStack.pop()
103 101 elif line.startswith('#'):
104 102 yield lineNum, line
105   - elif len(ifdefsStack) == 0 or all(map(lambda name: name in defs, ifdefsStack)):
  103 + elif len(ifdefsStack) == 0 or \
  104 + (all(map(lambda (name, isActive): name in defs and isActive, ifdefsStack))
  105 + and not any(map(lambda (name, isActive): name in defs and not isActive, ifdefsStack))):
106 106 yield lineNum, _processLine(lineNum, line, defines, filename)
107 107  
108 108 \ No newline at end of file
... ...