2012-01-11 39 views
0

「遞歸」標識符我有這樣一行:努力讓自己在使用規則匹配的柔性

0, 6 -> W(1) L(#); 

\# -> @shift_right R W(1) L 

我要解析與柔性這一行,並採取一切來自箭頭的每個部分的元素並將其放入列表中。我知道如何匹配簡單的東西,但我不知道如何用相同的規則來匹配多個東西。我不允許增加規則的限制。我有一個提示:解析這些棋子,然後將棋子合併起來,我可以使用狀態,但我不知道該怎麼做,而且我也無法在網絡上找到示例。有人能幫我嗎?

因此,在這裏的一個示例:

{

一個 - > W(B)#invert_loop;

乙 - > W(A)#invert_loop;

- > L(#)

}

當該部分開始我要創建的每一行,其中我把什麼是對左側的結構 - >在載體中,這些都是一些參數以及列表中的右側,其中每個術語都是另一種結構。對於什麼是右邊我寫的規則:

writex W([A-ZA-Z0-9#])爲W(東西)。

所以我需要解析這些行,這樣我就可以把參數和結構詮釋的大結構。像這樣的東西(在第一行):

與PARAM =新bigStruc和結構的列表= W(東西),#invert(它是另一種結構的參考符號)

那麼什麼我需要的是知道如何解析這些行,以便我可以創建和創建並填充這些bigStruct,也可以使用規則來構造簡單結構(我擁有這些結構所需的全部內容,但我不怎麼解析,以便我可以使用這些方法)。

對不起,我的英語,我希望這一次我是我想要的東西更清晰。

最後一分鐘編輯:我已經匹配了規則的整條生產線,然後用strtok的進行這項工作。有一種方法可以使用以前的規則來查看我必須創建什麼類型的結構?我的意思是,如果不留下並且放了很多,但是要使用writex W([a-zA-Z0-9。#])知道我必須創建這種結構?

+2

歡迎StackOverflow上。請注意,在這些網站上接受的表示「謝謝」的方式是爲您的問題提供有用的答案(以及其他人提供的良好答案和良好問題),並「接受」您的問題的答案之一爲最有幫助的。(直到你有更多的聲望,你不能做那麼多的投票,但你可以接受你的問題的答案,這樣做會稍微提高你的聲譽。)請參閱[FAQ](http ://stackoverflow.com/faq)特別是[我如何在這裏提問?](http://stackoverflow.com/faq#howtoask)。 – 2012-01-11 14:08:44

+2

爲什麼你需要在Flex中處理整個列表?語法對於處理列表很有幫助。掃描儀不是。如果您確實需要在Flex中執行此操作,那麼標記化規則是什麼? '用空白分隔的詞語'?或者'@ shift_right'兩個令牌和'W(1)'4令牌? – 2012-01-11 14:13:07

+0

你如何定義元素?空格,標點符號,特殊字符?列表不是一個本地c數據結構,所以你使用一個庫,或者你把項目放入一個數組?你想要列表中的實際標記,還是代表它的東西? – 2012-01-11 14:18:24

回答

0

好吧,讓我們看看這個片斷是如何爲你工作:

// these are exclusive rules, so they do not overlap, for inclusive rules, use %s 
%x dataStructure 
%x addRules 
%% 
<dataStructure>-> { BEGIN addRules; } 
\{    { BEGIN dataStructure; } 
<addRules>;  { BEGIN dataStructure; } 
<dataStructure>\} { BEGIN INITIAL; } 

<dataStructure>[^,]+ { ECHO; } //this will output each comma separated token 
<dataStructure>. { } //ignore anything else 
<dataStructure>\n { } //ignore anything else 
<addRules>[^ ]+ { ECHO; } //this will output each space separated rule 
<addRules>. { } //ignore anything else 
<addRules>\n { } //ignore anything else 
%% 

我不能完全肯定它它你想要的。編輯您的原始文章以包含您的評論內容以及示例,並請更好地構建您的英語。如果你不能自己解釋你想要的,我不能幫你。