antlr 部分字串中含有空格的解決方法

2022-04-03 04:01:41 字數 1447 閱讀 4348

在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...