我一直在尋找兩個小時而現在我並不知道該怎麼做。構建一個包含很多令牌的詞法分析器
我試圖建立一個分析器,使用可以匹配幾千字的詞法分析器。這些都是自然語言的詞語,這就是爲什麼他們如此之多。
我第一次嘗試用簡單的方法只有1000型動物爲一個令牌匹配:
TOKEN :
{
<VIRG: ",">
| <COORD: "et">
| <ADVERBE: "vraiment">
| <DET: "la">
| <ADJECTIF: "bonne">
| <NOM: "pomme"
| "émails"
| "émaux"
| "APL"
| "APLs"
| "Acide"
| "Acides"
| "Inuk"
[...]
javac編譯的後返回代碼是太大。
那麼,我怎麼能在我的詞法分析器中管理數千個令牌?
我讀過,對每個單詞使用n個令牌比對n個單詞使用一個令牌更有效。但在這種情況下,我將擁有1000多個令牌的規則,這看起來不是一個好主意;
我可以修改令牌管理器,或者構建一個,所以它只是匹配列表中的單詞;
這裏我知道詞法分析器是一個有限狀態機,這就是爲什麼它是不可能的,所以有反正使用其他詞法分析器嗎? ;
我可以自動生成一個匹配每個單詞的巨大正則表達式,但這不會讓我在事後獨立處理單詞,而且我不確定寫60行正則表達式是好想法;
也許有辦法從文件中加載令牌,這個解決方案非常接近解決方案2和3;
也許我應該使用另一種語言?我試圖從XLE(它可以處理超過70000個令牌的詞庫)遷移到java,這裏有趣的是生成java文件!
所以在這裏,我可以找到我的方式來處理數千個與javacc詞法分析器的令牌。如果有人使用它並有想法,那將會很棒嗎?
最佳
Corentin
如果您使用JavaCC構建解析器,則可能需要使用自定義詞法分析器(請參閱「USER_TOKEN_MANAGER」選項),該詞法分析器使用@rici在下面提到的實現技術。如果你只想要一個詞法分析器,JavaCC可能不是最好的工具。 –