Re: [情報] C++大師認證

看板C_and_CPP作者 (←這人是超級笨蛋)時間11年前 (2013/02/26 22:55), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串8/29 (看更多)
※ 引述《yoco315 (眠月)》之銘言: : 換我來問問題了 XD : 正在 parse pp-number,但是文法上有點小問題 : 根據他給的文法,pp-number 的定義是: : pp-number: : digit : '.' digit : pp-number digit : pp-number identifer-nondigit : pp-number 'e' sign : pp-number 'E' sign : pp-number '.' : 我直觀的看後面五個, : 看起來就是 pp-number 後面可以無限制的接這五種東西一直長下去, : 所以是不是等價於這個 regex : ([0-9.] | [eE][+-] | identifier-nondigit)* : 然後前面的開頭可以是 digit 或 '.' digit : 前面那兩個可以寫成 : \.?[0-9] : 整個就是 : \.?[0-9]([0-9.] | [eE][+-] | identifier-nondigit)* : 好,我的問題來了, : 根據他範例給的一個 1.0e2 : 這東西完全無法被他給的規則 parse 阿! 1.0e2 pp-number 1.0 e 2 pp-number 'e' sign (rule 4) 1. 0 e 2 pp-number digit 'e' sign (rule 1) 1 . 0 e 2 pp-number '.' digit 'e' sign (rule 6) digit '.' digit 'e' sign (rule 0) 可 parse 無誤 正規表示式怎麼分析忘記了, 我要去查一下書XD 不過你那個 regex 肯定是不等價的, 1.02e 這種東西會被允許, 但是標準是不行 -- 作者 Linux (Windows) 看板 C_and_CPP 標題 [問題] 如何確認是否 free 對記憶體 時間 Fri Nov 2 00:14:03 2012

11/02 00:43,
valgrind, 但 windowns 版的沒試過XD
11/02 00:43

11/02 00:44,
linux 上那真的是不二選擇了
11/02 00:44

11/02 00:45,
我是用 Windows ....>"<
11/02 00:45
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.81.146 ※ 編輯: uranusjr 來自: 114.32.81.146 (02/26 22:57)

02/26 22:58, , 1F
sign 跟 2 不 match 阿,sign 是 [+-] @@
02/26 22:58, 1F

02/26 22:59, , 2F
對,這就是我困惑的地方,我的re是從標準的grammar導來的
02/26 22:59, 2F

02/26 22:59, , 3F
但是標準上關於pp-number這個grammar超奇怪...
02/26 22:59, 3F

02/26 22:59, , 4F
我弄錯了, 改一下
02/26 22:59, 4F

02/26 23:08, , 5F
我懂你的問題在哪了, e 後面要接 sign
02/26 23:08, 5F

02/26 23:12, , 6F
對,這是其中一個問題,另外一個問題 1e2E3+- 這種東西也
02/26 23:12, 6F

02/26 23:12, , 7F
不過如果把 e 視為 nondigit 就可以過了...有這樣的嗎XD
02/26 23:12, 7F

02/26 23:12, , 8F
會被判定成 pp-number,甚至 .1abc+-ee789 也是..
02/26 23:12, 8F

02/26 23:13, , 9F
1e2E3+- 不行啊, 最後面那個 +- 就沒有規則能拆了
02/26 23:13, 9F

02/26 23:20, , 10F
喔 對對 @@.. 但是 1abc3xyz5de+ 可以.. 好怪..
02/26 23:20, 10F
文章代碼(AID): #1HBCp-YY (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HBCp-YY (C_and_CPP)