簡體   English   中英

上下文敏感的代碼標記化

[英]context sensitive tokenization of code

我正在研究一種語言的解析器

  • 標識符(例如,一個字母后跟一些字母數字字符或下划線),

  • 整數(任意數字和可能的插入^ ),

  • 一些運營商,

  • filename(一些字母數字字符,可能還有斜線和點)

顯然文件名重疊整數和標識符,所以一般情況下我無法確定我是否有文件名,或者說是標識符,除非文件名包含斜杠或點。

但文件名只能跟隨特定的運算符。

我的問題是在標記化過程中通常如何處理這種情況? 我有一個表驅動的標記器(詞法分析器),但我不知道如何從整數或標識符告訴文件名。 這是怎么做到的?

如果filename是整數和標識符的超集,那么我可能會有語法產生來處理它,但令牌重疊......

Flex和其他詞法分析器具有啟動條件的概念。 本質上,詞法分析器是狀態機,其確切行為將取決於其當前狀態。

在您的示例中,當您的詞法分析器在文件名之前遇到操作符時,它應該切換到FilenameMode狀態(或其他),然后在它生成它期望的文件名標記后切換回來。

編輯:

只是在超鏈接的這一邊給出一些具體的代碼:

遇到操作員時會觸發FILENAME_MODE ...

{FILENAME_PREFIX} { BEGIN(FILENAME_MODE); }

您將定義您的規則來解析文件名:

<FILENAME_MODE>{FILENAME_CHARS}+ { BEGIN(INITIAL); }

...在動作中切換回INITIAL狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM