2017-04-13 33 views
2

所以,我有以下的解析器與乘法解析表達式

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) 

和表達式,類似的東西2 * Y + 7,它是分析好了,遺憾的是還有2Y + 7,那麼如何如果2和y一起來改變EXPRESS引發異常? 謝謝

+0

你已經定義了VARNAME接受2y這樣的東西作爲潛在的變量名稱。 –

+0

那麼,如何糾正它? –

+0

Word也有一個2參數的構造函數 - 如果使用該構造函數,那麼第一個參數是有效前導字符的字符串,第二個參數是有效正文字符的字符串。嘗試'VARNAME = Word(alphas,alphanums,max = 3)'。 – PaulMcG

回答

0

的問題是在這兩種是解析器

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

所以2Y是varname的,但不是Num和無功如我所料。 謝謝。