Commit a6f0d91205c224c9cd15b22b94aaf8aeefd3cd6f
1 parent
ff25f748
- poprawienie wyświetlania błędów parsera reguł segmentacji
git-svn-id: svn://svn.nlp.ipipan.waw.pl/morfeusz/morfeusz@111 ff4e3ee1-f430-4e82-ade0-24591c43f1fd
Showing
3 changed files
with
20 additions
and
6 deletions
fsabuilder/.settings/org.eclipse.core.resources.prefs
1 | eclipse.preferences.version=1 | 1 | eclipse.preferences.version=1 |
2 | encoding//morfeuszbuilder/fsa/test/testConstruction.py=utf-8 | 2 | encoding//morfeuszbuilder/fsa/test/testConstruction.py=utf-8 |
3 | +encoding//morfeuszbuilder/segrules/preprocessor.py=utf-8 | ||
3 | encoding/buildfsa.py=utf-8 | 4 | encoding/buildfsa.py=utf-8 |
fsabuilder/buildfsa.py
@@ -261,5 +261,8 @@ def main(opts): | @@ -261,5 +261,8 @@ def main(opts): | ||
261 | if __name__ == '__main__': | 261 | if __name__ == '__main__': |
262 | import os | 262 | import os |
263 | opts = _parseOptions() | 263 | opts = _parseOptions() |
264 | - main(opts) | 264 | + try: |
265 | + main(opts) | ||
266 | + except Exception as ex: | ||
267 | + print >> sys.stderr, unicode(ex).encode('utf8') | ||
265 | 268 |
fsabuilder/morfeuszbuilder/segrules/preprocessor.py
1 | +# -*- coding:utf-8 -*- | ||
1 | ''' | 2 | ''' |
2 | Created on 23 sty 2014 | 3 | Created on 23 sty 2014 |
3 | 4 | ||
@@ -5,8 +6,9 @@ Created on 23 sty 2014 | @@ -5,8 +6,9 @@ Created on 23 sty 2014 | ||
5 | ''' | 6 | ''' |
6 | import re | 7 | import re |
7 | from pyparsing import * | 8 | from pyparsing import * |
9 | +from morfeuszbuilder.utils import exceptions | ||
8 | 10 | ||
9 | -identifier = Word(alphas, bodyChars=alphanums+'_>*+!') | 11 | +identifier = Word(alphas, bodyChars=alphanums+u'_>*+!') |
10 | define = Keyword('#define').suppress() + identifier + Optional(Suppress('(') + identifier + Suppress(')')) + restOfLine + LineEnd() + StringEnd() | 12 | define = Keyword('#define').suppress() + identifier + Optional(Suppress('(') + identifier + Suppress(')')) + restOfLine + LineEnd() + StringEnd() |
11 | ifdef = Keyword('#ifdef').suppress() + identifier + LineEnd() + StringEnd() | 13 | ifdef = Keyword('#ifdef').suppress() + identifier + LineEnd() + StringEnd() |
12 | endif = Keyword('#endif').suppress() + LineEnd() + StringEnd() | 14 | endif = Keyword('#endif').suppress() + LineEnd() + StringEnd() |
@@ -52,7 +54,7 @@ def _tryToSubstituteNonArgDefine(s, t, defines): | @@ -52,7 +54,7 @@ def _tryToSubstituteNonArgDefine(s, t, defines): | ||
52 | else: | 54 | else: |
53 | return defineName | 55 | return defineName |
54 | 56 | ||
55 | -def _processLine(line, defines): | 57 | +def _processLine(lineNum, line, defines): |
56 | if line.strip(): | 58 | if line.strip(): |
57 | 59 | ||
58 | rule = Forward() | 60 | rule = Forward() |
@@ -65,7 +67,15 @@ def _processLine(line, defines): | @@ -65,7 +67,15 @@ def _processLine(line, defines): | ||
65 | rule.setParseAction(lambda s, l, t: ' '.join(t)) | 67 | rule.setParseAction(lambda s, l, t: ' '.join(t)) |
66 | defineInstance.setParseAction(lambda s, l, t: _tryToSubstituteArgDefine(s, t, defines)) | 68 | defineInstance.setParseAction(lambda s, l, t: _tryToSubstituteArgDefine(s, t, defines)) |
67 | localId.setParseAction(lambda s, l, t: _tryToSubstituteNonArgDefine(s, t, defines)) | 69 | localId.setParseAction(lambda s, l, t: _tryToSubstituteNonArgDefine(s, t, defines)) |
68 | - return rule.parseString(line, parseAll=True)[0] | 70 | + try: |
71 | + return rule.parseString(line, parseAll=True)[0] | ||
72 | + except ParseException as ex: | ||
73 | + msg = u'Preprocessing of segmentation rules failed.\n' | ||
74 | + msg += line + '\n' | ||
75 | + msg += (ex.col - 1) * ' ' + '^\n' | ||
76 | + msg += ex.msg | ||
77 | +# print unicode(exceptions.SegtypesException(msg)).encode('utf8') | ||
78 | + raise exceptions.SegtypesException(msg) | ||
69 | else: | 79 | else: |
70 | return line | 80 | return line |
71 | 81 | ||
@@ -82,7 +92,7 @@ def preprocess(inputLines, defs): | @@ -82,7 +92,7 @@ def preprocess(inputLines, defs): | ||
82 | name, arg, val = parsedDefine | 92 | name, arg, val = parsedDefine |
83 | localDefines = defines.copy() | 93 | localDefines = defines.copy() |
84 | localDefines[arg] = NonArgDefine(arg, arg) | 94 | localDefines[arg] = NonArgDefine(arg, arg) |
85 | - val = _processLine(val, localDefines) | 95 | + val = _processLine(lineNum, val, localDefines) |
86 | defines[name] = ArgDefine(name, arg, val) | 96 | defines[name] = ArgDefine(name, arg, val) |
87 | elif line.startswith('#ifdef'): | 97 | elif line.startswith('#ifdef'): |
88 | name = ifdef.parseString(line)[0] | 98 | name = ifdef.parseString(line)[0] |
@@ -92,5 +102,5 @@ def preprocess(inputLines, defs): | @@ -92,5 +102,5 @@ def preprocess(inputLines, defs): | ||
92 | elif line.startswith('#'): | 102 | elif line.startswith('#'): |
93 | yield lineNum, line | 103 | yield lineNum, line |
94 | elif len(ifdefsStack) == 0 or all(map(lambda name: name in defs, ifdefsStack)): | 104 | elif len(ifdefsStack) == 0 or all(map(lambda name: name in defs, ifdefsStack)): |
95 | - yield lineNum, _processLine(line, defines) | 105 | + yield lineNum, _processLine(lineNum, line, defines) |
96 | 106 | ||
97 | \ No newline at end of file | 107 | \ No newline at end of file |