日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python子类定制_在Python中实现可定制的Lexer类

發布時間:2023/12/19 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python子类定制_在Python中实现可定制的Lexer类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想實現一個可定制和可擴展的lexer類。在

我的想法

2種不同類型的處理程序:字符集處理程序

函數處理程序

當一個字符被讀取時,它被推送到所有注冊到lexer的處理程序中。一旦處理程序匹配并返回一個有效的令牌,它就會被返回。如果沒有處理程序與字符匹配,則調用一個最壞情況函數,如果該函數沒有返回有效的標記,則讀取下一個字符并遞歸執行。在

字符集處理程序由一個字符串和一個接受三個參數的函數組成。字符串表示一組字符,當當前解析的字符包含在該字符串中時,這些字符將導致調用該函數。當函數無法創建以下字符的標記時,它可能返回None。函數必須將正在讀取的所有字符推回,以便在無法處理的情況下創建令牌。下一次調用scanner.read_next_char()時,將返回被推回掃描儀的字符,這樣就可以像函數從未接觸過掃描儀一樣讀取輸入字節流。在

函數處理程序是一個包含三個參數的函數,如果它不能用調用處理程序的字符后面的字符創建有效的令牌或None,就像上面與字符集相關聯的函數一樣。在

當沒有處理程序可以從當前及其后的字符創建有效的令牌并遵循上述模式時,調用最壞情況函數。在

每個處理程序都有三個參數,lexer使用的掃描器本身、lexer使用的掃描器以及實際調用處理程序的當前字符。在

Lexer本身和處理程序是分開的。在class LexingRules(object):

def __init__(self):

self.charset_handlers = []

self.function_handlers = []

self.worst_case = None

# convenient methods for adding handlers

class Lexer(object):

def __init__(self, scanner, rules):

self.scanner = scanner

self.rules = rules

self.current_token = None

self.read_next_token()

def read_next_token(self):

current_char = self.scanner.current_char

for charset, handler in self.rules.charset_handlers:

if current_char in charset:

token = handler(self, self.scanner, current_char)

if isinstance(token, Token):

self.current_token = token

return token

for function in self.rules.function_handlers:

token = function(self, self.scanner, current_char)

if isinstance(token, Token):

self.current_token = token

return token

if self.rules.worst_case:

token = self.rules.worst_case(self, self.scanner, current_char)

if isinstance(token, Token):

self.current_token = token

return token

self.scanner.read()

return self.read_next_token()

一個可能的LexingRules子類

^{pr2}$

目標

基本Lexer實現和硬編碼Lexing操作的分離。

我目前正處于一個我自己的項目的開始階段。我想創建一種可擴展的編譯/翻譯語言。語法和語句擴展等應該可以創建。在

問題

你對雷克薩斯的設計有什么看法?你有什么可抱怨的嗎?或者有一個如何改進它,增加更多功能的想法?在

總結

以上是生活随笔為你收集整理的python子类定制_在Python中实现可定制的Lexer类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。