看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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