Re: [問題] Extra option與Illegal option的差別

看板EE_DSnP作者 (路人1號)時間11年前 (2012/11/17 22:41), 編輯推噓8(807)
留言15則, 8人參與, 最新討論串2/2 (看更多)
為了行文方便定義一下用語 名詞: token: 命令名稱後面跟的東西 用空格切開後的字串集 flag: 形如 -* 的 token argument: 沒有 flag 跟在前面的 token option: 某些 flag 要求後面要緊跟著一個引數 令其為 option of -(flag name) 可能會圖方便只寫 option 形容詞: optional: 被方括弧括起來的東西 essential: 被角括弧括起來的東西 ============================================================================== 以下要用 MTDelete (mtd) 舉例 所以先分析一下它的 tokens: Argument: 沒有 -Index : essential flag 需要 option -Random : essential flag 需要 option -Array : optional flag 不需要 option 特殊規定: -i 和 -r 為二選一 ============================================================================== 我的認知大概是這樣: Illegal: 1.如果一個 argument 或 flag 不在命令可能接受的範圍內就是 Illegal 例如 mtd -a -i 2 8 經過解析的結果 -a 是 沒有 option 的 flag -i 是 有 option=2 的 flag 8 是 argument 因為 mtd 沒有 argument 所以 8 是 Illegal 2.如果一個 argument 或 option (of flag) 的型態錯誤 例如 mtd -a -i k 因為 k 不是數字 違反 option of -i 的規定 所以是 Illegal Extra: 1.如果一個 argument 或 flag 可能被命令接受 但數量上超過了命令的需求 則是 Extra 例如 mtd -a -i 2 -a 則 -a 就是可以被接受但是多打了一個 所以第二個 -a 是 Extra Note: 如果是像 mtd -i 2 -r 這樣 因為是二選一 所以後面那個就會視為多出來 Missing: 1.如果輸入的命令經解析認為某個 flag 沒有 option 但它其實需要 option 的話 就會判定為 Missing 例如 mtd -a -i -i 需要 option 可是沒給這樣 2.目前來講 好像只有在最後一個 token 是需要 option 的 flag 的時候 才會變成 Missing ============================================================================== 其實這些並不是最麻煩的 最討厭的是複合情況 或者說多重解釋 像是 mtd -i 8 -r -a 一開始到 -i 8 -r 都還好 可是 -a 可以視為 flag (Missing) 也可以把 -a 視為 -r 的 option (Illegal) 也可以先說 -r 撞了 -i (Extra) 到底優先度是怎樣就很難解釋 (其實是原 PO 根本沒搞懂) 除了慢慢玩 ref 之外好像也沒什麼好方法... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.9.157 ※ 編輯: ypf791 來自: 111.248.9.157 (11/17 22:45)

11/17 23:04, , 1F
我也是慢慢try ref... 蠻花時間的XD
11/17 23:04, 1F

11/17 23:06, , 2F
謝謝精闢的解析,不過關於錯誤訊息只要不要把錯的 parse 成
11/17 23:06, 2F

11/17 23:07, , 3F
對的,對的 parse 成錯的,就 OK. 錯誤訊息有出入沒有關係
11/17 23:07, 3F

11/17 23:08, , 4F
畢竟 parse 的順序不同都會造成訊息的不同,大家可以不用
11/17 23:08, 4F

11/17 23:08, , 5F
花時間在調成跟 ref 一樣 (每年好像都會有這個問題)
11/17 23:08, 5F

11/17 23:14, , 6F
但就是會想調到全都一樣啊....
11/17 23:14, 6F

11/18 00:07, , 7F
沒想到今天調了好久還是少調到一個東西...>~<
11/18 00:07, 7F

11/18 00:32, , 8F
推 繼續慢慢玩ref
11/18 00:32, 8F

11/18 09:30, , 9F
剛剛跑了一下 發現mtn和mtd用的邏輯是不一樣的(倒)
11/18 09:30, 9F

11/18 10:44, , 10F
感謝ypf大與老師的解說
11/18 10:44, 10F

11/18 16:39, , 11F
mtn -a 1 a 這樣是extra mtn -a 1 這樣是missing 怎麼
11/18 16:39, 11F

11/18 16:39, , 12F
都覺得不太合理= ="
11/18 16:39, 12F

11/18 16:40, , 13F
這種錯誤訊息會讓使用者陷入無窮迴圈吧
11/18 16:40, 13F

11/18 17:11, , 14F
建議已經寫完了的人再來追究這個錯誤訊息吧! 不算分的 XD
11/18 17:11, 14F

11/21 04:36, , 15F
不算分推!!
11/21 04:36, 15F
文章代碼(AID): #1Gfw8igu (EE_DSnP)
文章代碼(AID): #1Gfw8igu (EE_DSnP)