我有一個文件,我將其中的所有字符串進行標記。令牌化文件中的字符串
因此,每個令牌都被存儲在char *token = (char *) malloc(len + 1);
令牌在新的令牌被分配之前被釋放,所以我需要一種方法來存儲令牌以供進一步使用。
什麼是存儲令牌的好方法?我有一個函數可以一次打印出一個令牌字符串。
我在這裏的問題不是如何來標記或解析所以請忽略的是落實。我的問題是,我有一堆字符串在一個循環中被分配和釋放了好幾次。那麼,如何將每個分配存儲在別處以供進一步使用呢?
我有一個文件,我將其中的所有字符串進行標記。令牌化文件中的字符串
因此,每個令牌都被存儲在char *token = (char *) malloc(len + 1);
令牌在新的令牌被分配之前被釋放,所以我需要一種方法來存儲令牌以供進一步使用。
什麼是存儲令牌的好方法?我有一個函數可以一次打印出一個令牌字符串。
我在這裏的問題不是如何來標記或解析所以請忽略的是落實。我的問題是,我有一堆字符串在一個循環中被分配和釋放了好幾次。那麼,如何將每個分配存儲在別處以供進一步使用呢?
一般令牌不存儲到文件。當解析器準備好讀取更多輸入時,解析器會請求它們。
這樣,令牌被存儲在該程序的堆內存,並且它們已被處理後(這可能是長前的文件被完全解析)它們被釋放。
---更新跟隨編輯---
如果你擔心過多的分配和釋放,那麼你就有了一些解決方案,這取決於你正試圖解決這一問題的細節。
對於字符串,你可以通過一個「字符串生成器」界面,檢查是否字符串已經存在與文本創建它們,如果是這樣,返回到已經存在的字符串的引用。請注意,爲了正常工作,所有返回的字符串必須是不可變的(因爲在一個引用中更改字符串將更改所有引用中的字符串)。類似的解決方案是可能的數字,布爾值等
對於令牌再利用,可以使令牌爲結構主要由指針引用可能「拿來主義」解析器的數據。這樣解析器抓取標記的「字段」,並且「骨架」標記可以被添加回「重用隊列」。重用隊列應在重置標記器的「數據」引用之前將其返回給標記器,重寫器會重寫該標記器以向隊列請求其數據結構。在隊列中沒有令牌的情況下,隊列應該靜靜地分配它們。
其他的解決方案也存在,這取決於你想如何狡猾獲得。
請參閱編輯。謝謝 – darksky
我已更新問題以解決某些編輯問題。 –
我們可以看到這個文件的例子嗎? –
你能提供一些更多的上下文嗎?你想做什麼? –
目前,您的問題的答案範圍從完整的詞法分析解決方案(如lex)或簡單的字符串標記器(如strtok)。正如其他人所說的提供更多細節。 – Joe