[英]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.