Open otakbeku opened 3 years ago
Kalo dari gw lebih baik seperti ini kalau mau dipisah:
<boolean_expr> ::= <strict_boolean_expr> | <relaxed_boolean_operator> | <relaxed_boolean_term> | (<boolean_expr>)
<relaxed_boolean_expr> ::= <boolean_expr> <relaxed_boolean_operator> <boolean_expr>
<strict_boolean_expr> ::= <strict_boolean_term> <strict_boolean_operator> <boolean_expr>
<relaxed_boolean_operator> ::= && | ||
<strict_boolean_operator> ::= and | or
<strict_boolean_term> ::= <boolean> | not(<strict_boolean_term>) | !<strict_boolean_term>
<relaxed_boolean_term> ::= <term> | not(<relaxed_boolean_term>) | !<relaxed_boolean_term>
Soalnya ada kasus seperti:
control = ((a and !b) or c) && (c or (d && not(d))) and (e && !not(!f) || e)
if control do IO.puts "Hello world!" end
Asumsi semua variabel tipenya bener (variabel di sebelah kiri 'and' dan 'or' selalu boolean) itu bisa di compile. Versi yang lama itu gk bisa diturunkan jadi yang di atas.
ohhh oke, lebih setuju sama yang dipisah
btw yang dipisah itu gabisa nurunin not(a && b)
ya?
Belum bisa kalau yang seperti itu
Yang ini sudah bisa nurunin not(a && b)
.
<boolean_expr> ::= <strict_boolean_expr> | <relaxed_boolean_expr> | <relaxed_boolean_term> | <not_boolean_expr> |(<boolean_expr>)
<not_boolean_expr> ::= not(<boolean_expr>) | !<boolean_expr>
<relaxed_boolean_expr> ::= <boolean_expr> <relaxed_boolean_operator> <boolean_expr>
<strict_boolean_expr> ::= <strict_boolean_term> <strict_boolean_operator> <boolean_expr>
<relaxed_boolean_operator> ::= && | ||
<strict_boolean_operator> ::= and | or
<strict_boolean_term> ::= <boolean>
<relaxed_boolean_term> ::= <term>
wokeh mantep, tinggal ditambahin ke file bnfnya @IvanAldion
btw IMHO karena kita gabisa mastiin kalau ruas kirinya teh suatu identifier yang kalau di evaluate jadi boolean (dan pada tahap parsing juga kita blm nge evaluate si identifier/ expressionnya), menurut urang si relaxed sama strict secara syntatic mah sama aja sih, jadi gausah dipisah gitu
https://github.com/otakbeku/elixir-bnf/blob/2ce635f25a335d32c0ca6db5e5e09bf68f6cb2af/operator.bnf#L19
Karena boolean di elixir ada dua jenis, seperitnya lebih baik dipisah rulenya. Soalnya di guards cuma bisa pakai yang strict aja.
Kalo gini gimana? @IvanAldion @banditelol