邏輯表示式的短路是如何實現的?

時間 2021-05-31 17:38:28

1樓:冒泡

先糾正乙個名詞,不是左值和右值,應該說是「左運算分量」和「右運算分量」

不同實現方式有不同的做法,不過大體上就是弄成乙個if

簡單點比如說用ast物件來實現:

#加法運算不短路

class ExprAdddef eval(selfreturn self.left.eval() + self.right.eval()

#or運算短路

class ExprOrdef eval(selfif self.left.evalreturn True

if self.right.evalreturn True

return False

ExprOr.eval故意拆開寫了,如果用位元組碼實現也差不多是這個流程,比如Python:

>>> dis.dis(eval("lambda: 1 or 2"))

10 LOAD_CONST1 (13 JUMP_IF_TRUE_OR_POP 96 LOAD_CONST2 (2gt;> 9 RETURN_VALUE

>>>左右運算分量的計算過程中插乙個條件jump指令

你是如何學會正規表示式的?

一絲混亂 大部分知識和技能的都符合二八定律 20 知識點的使用頻率是80 80 知識點的使用頻率是20 但是這些東西的教程或者說明是一股腦兒全部給你的,並沒有著重標出哪些是重點,哪些用的頻率不那麼高。正則就是乙個非常典型的例子,我覺得正則說是9.5 0.5都不為過。我使用過程中,用到最多的是i g ...

正規表示式匹配失敗是如何回溯的?

Belleve 在 PEG 文法裡 用後者展開即可得到以下的模式 Matcher a 是乙個函式,接入三個引數 匹配狀態 s,成功續體 success 和失敗續體 failure 在任意狀態 s 下匹配空模式 總是成功,故可以直接用封裝的 success s function Directly su...

正規表示式是圖靈完備的嗎?

理論上說,正規表示式就是符合Chomsky層級中type3文法的字串,那麼肯定是不完備的,至少連 1 n 2 n 這樣的字串都無法描述。但是實際的正規表示式引擎實現中,有時為了增強匹配字串的能力,會讓該引擎的語法達到type2乃至type0。比如Perl6的正規表示式可以完全匹配CFG type2 ...