2017-04-13 2 views
2

Also, ich habe folgende ParserParsing Ausdruck mit Multiplikation

END = Literal(';').suppress() 
POINT = Literal('.') 
COMMA = Literal(',').suppress() 
COLON = Word(':', exact=1).suppress() 
EQUAL = Literal('=').suppress() 
VARNAME = Word(alphanums, max=3) 
DIGIT = Word(nums, exact=1) 
SIGN = oneOf('+ -') 
OPER = oneOf('+ - */^ ') 
NATNUM = DIGIT + ZeroOrMore(DIGIT) 
REALNUM = Combine(Optional(SIGN) + NATNUM + Optional(POINT)*1 + NATNUM) 
EXRPESS = Forward() 
EXRPESS << Combine((REALNUM | VARNAME) + ZeroOrMore(OPER*1 + EXRPESS), adjacent=False) 

Und der Ausdruck, so etwas wie, dass 2 * y + 7, und es ist ok, leider sowie 2j + 7. So ist parsen, wie EXPRESS ändern, um eine Ausnahme auszulösen, wenn 2 und y zusammenkommen? Danke

+0

Sie haben VARNAME definiert, um Dinge wie 2y als möglichen Variablennamen zu akzeptieren. –

+0

Also, wie man es korrigiert? –

+0

Word hat auch einen Konstruktor mit zwei Argumenten - wenn Sie das verwenden, dann ist das erste Argument eine Zeichenfolge mit gültigen führenden Zeichen, und das zweite Argument ist eine Zeichenfolge mit gültigen Körperzeichen. Versuchen Sie 'VARNAME = Word (alphas, alphanums, max = 3)'. – PaulMcG

Antwort

0

Problem in beide das war-Parser

VARNAME = Word(alphas, max=1) 
NATNUM = Word(nums) # 1234567890 

So 2j war die varname, aber nicht Num und Var, wie ich erwartet. Danke.