X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=t%2Fmoe%2Fconfparser.py;h=d024912b94d9497aa679a6144603103d301ed460;hb=c861bd9c09d20e06533e122253bcd3bb94b0bef9;hp=ebc453d52a16e6e430fd8c98ba182334edab20a8;hpb=816ab051157a7f0e42a68f4202297db5699c3373;p=eval.git diff --git a/t/moe/confparser.py b/t/moe/confparser.py index ebc453d..d024912 100644 --- a/t/moe/confparser.py +++ b/t/moe/confparser.py @@ -39,7 +39,7 @@ NOTE: ';' or '\n' is currently required even after CONDITION and SUBTREE block TODO: change to OPERATION only NOTE: Formula may contain additional/extra parentheses -EXPRESSION = '"' ( ECHAR | '{' VARNAME '}' )* '"' | re"'[^'\\n]*'" +EXPRESSION = '"' ( ECHAR | '{' VARNAME '}' )* '"' | re"'[^'\\n]*'" | VARNAME ECHAR = re('([^\\{}]|\\\\|\\{|\\}|\\n)*') VARNAME = re('[a-zA-Z0-9-_]+(\.[a-zA-Z0-9-_]+)*') """ @@ -85,7 +85,7 @@ class ConfigParser(object): `fname` is an optional name of the file, for debugging and syntax errors. `level` indicates the precedence the operations should have in the ConfigTree """ - self.s = s # Unicode, string or an open file + self.s = s # Unicode, ascii string or an open file self.buf = u"" # Read-buffer for s file, whole unicode string for s string/unicode if isinstance(self.s, types.StringTypes): self.buf = unicode(self.s) @@ -278,7 +278,7 @@ class ConfigParser(object): def p_VARNAME(self): self.dbg() # Debug vnl = [] - while self.peek().isalnum() or self.peek() in u'-_.': + while self.preread(1) and (self.peek().isalnum() or self.peek() in u'-_.'): vnl.append(self.next()) vn = u''.join(vnl) if not conf.re_VARNAME.match(vn): @@ -287,9 +287,11 @@ class ConfigParser(object): def p_EXPRESSION(self): self.dbg() # Debug + if self.peek() not in '\'"': + # Expect a variable name + varname = self.p_VARNAME() + return conf.ConfigExpression((self.tree.lookup(varname),), varname) op = self.next() - if op not in '\'"': - self.syntax_error('Invalid start of expression') # Parse literal expression if op == u'\'': exl = [] @@ -331,7 +333,7 @@ class ConfigParser(object): expr2[-1] = expr2[-1] + i else: expr2.append(i) - return conf.ConfigExpression(tuple(expr2), exs) + return conf.ConfigExpression(expr2, exs) def p_FORMULA(self): self.dbg() # Debug