在antlr解析ast時我們通常都會把字串之間的空格,回車,換行等隱藏
如下:ws
: ( '\t' | ' ' | '\r' | '\n' )+
;但是,如果我們希望保留解析出來的字串怎麼辦呢。就如我們想解析出來乙個程式段
foo()89
tokens
1011
12starting
13 : block+14;
1516
block
17: block blockname body
18 -> ^(block blockname ^(mark body));
1920
blockname
21: id22;
2324
id25 : ('a..z'|'a'..'z'|'0'..'9'|'_')+26;
2728
block
29 : 'block'30;
3132
body
33 : begin .*end
34;
3536
//此外,token定義裡的token或fragment之間如果沒有ws,對應的輸入檔案中也
37//
不能匹配空格。
3839
ws
40 : ( '\t' | ' ' | '\r' | '\n' )+ 41;
4243
fragment
44begin
45 : 'begin'46;
4748
fragment
49end
50 : 'end'
51 ;
".*"**這段字串可以包含任意字元。
輸入檔案:
block 0000blockname1
begin body end
block blockname2
begin body aa bb cc dd end
block blockname3
begin end
block blockname4
begin body end
解析的樹如下:
parser tree: (block 0000blockname1 (mark begin body end)) (block
blockname2 (mark begin body aa bb cc dd end)) (block blockname3 (mark
begin end)) (block blockname4 (mark begin body end))
---------------
注:block後的block_name中字元之間不能包含空格及回車。整個程式段的字串必須以begin開始,以end結束。
c c 字串讀入含有空格
字串帶空格讀入在某些場合用的很多,題主總結了三中比較好用的方法 sring型別不能讀取空格,但是getline cin,string 可以,字串以回車 n 結束讀取。c語言中,常使用gets str 同樣以回車 n 結束。使用scanf c str 這個是以字元c為結束符,那麼修改下scanf n ...
c 中如何輸入含有空格的字串
使用cin輸入指定字串的時,如果該字串中不包含空格鍵的話,是不會有什麼問題的,但是如果包含空格鍵的話,那就不行了。對於這種情況的話,該如何解決呢?這時候就得用到cin.get 和cin.getline 一 當使用cin.get 和cin.getline 輸入乙個字元時 char c 我已知有四種種方...
選擇器中含有空格的注意事項
選擇器中的空格也是不容忽視的,多乙個空格或少乙個空格也許會得到截然不同的結果。看下面的例子,它的html 如下 aa bbcc dd ee ff 使用如下的jquery選擇器分別獲取它們。var t a test hidden var t b test hidden var len a t a.le...