簡體   English   中英

在Python中將代碼拆分為令牌(Lexing)

[英]Split code into tokens (Lexing) in Python

我正在嘗試標記以下代碼:

foo ::= 5
bar ::= 15
foobar ::= 20

所以輸出是:

['foo', '::=', '5', '\n', 'bar', '::=', '15', '/n', 'foobar', '::=', '20' ]

我當前的嘗試如下:

reTokens = re.compile(r' ')
tokens = reTokens.split(source)
print(tokens)

但是,此打印:

['\n', '', '', '', 'foo', '::=', '5\n', '', '', '', 'bar', '::=', '15\n', '', '', '', 'foobar', '::=', '20\n']

如您所見,這里有很多問題。 幾個主要問題是:

  1. 沒有完全刪除空間
  2. 某些標記未正確拆分(即“ \\ n”。在正則表達式中添加\\ n不能解決問題,因為這會將其完全從數組中刪除)。

您可以這樣做:

from functools import reduce

lines = source.splitlines()
tokens_list = [line.strip().split() for line in lines]
tokens = reduce(lambda x,y: x + ['\n'] + y, tokens_list)
print(tokens)

這會將源划分為其行,對每行進行標記,然后使它們成為在每行之間帶有\\n的單個列表。

暫無
暫無

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

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