作者uranusjr (←這人是超級笨蛋)
看板C_and_CPP
標題Re: [情報] C++大師認證
時間Tue Feb 26 22:55:56 2013
※ 引述《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
→ akasan:valgrind, 但 windowns 版的沒試過XD 11/02 00:43
→ akasan:linux 上那真的是不二選擇了 11/02 00:44
→ Linux:我是用 Windows ....>"< 11/02 00:45
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
※ 編輯: uranusjr 來自: 114.32.81.146 (02/26 22:57)
推 yoco315:sign 跟 2 不 match 阿,sign 是 [+-] @@ 02/26 22:58
→ yoco315:對,這就是我困惑的地方,我的re是從標準的grammar導來的 02/26 22:59
→ yoco315:但是標準上關於pp-number這個grammar超奇怪... 02/26 22:59
→ uranusjr:我弄錯了, 改一下 02/26 22:59
→ uranusjr:我懂你的問題在哪了, e 後面要接 sign 02/26 23:08
→ yoco315:對,這是其中一個問題,另外一個問題 1e2E3+- 這種東西也 02/26 23:12
→ uranusjr:不過如果把 e 視為 nondigit 就可以過了...有這樣的嗎XD 02/26 23:12
→ yoco315:會被判定成 pp-number,甚至 .1abc+-ee789 也是.. 02/26 23:12
→ uranusjr:1e2E3+- 不行啊, 最後面那個 +- 就沒有規則能拆了 02/26 23:13
→ yoco315:喔 對對 @@.. 但是 1abc3xyz5de+ 可以.. 好怪.. 02/26 23:20