【发布时间】:2020-01-15 15:06:03
【问题描述】:
我正在尝试在 python 中创建一种玩具语言,但我在创建我的词法分析器时遇到了困难。用我的语言分配变量的方法是使用箭头(“
以下是我目前如何拆分我的语言的源代码,但这会拆分每个非字母数字字符。
word_list = re.split('(\W)', self.source_code)
word_list = [elem for elem in word_list if (elem != '' and elem != ' ')]
例如:
Hi <-- 1.2
前往:
['Hi', '<', '-', '-', '1', '.', '2', '\n']
但我希望它拆分为
['Hi', '<--', '1.2']
我想知道是否可以在每个字母数字字符上进行拆分,除非存在“
编辑
一个更复杂的例子:
DECLARE Number: INTEGER
DECLARE Hi: REAL
Hi <-- 1.2
INPUT Number
IF Number + Hi > 3
THEN
OUTPUT "Hello"
应该去
['DECLARE', 'Number', ':', 'INTEGER','\n' 'DECLARE', 'Hi', ':', 'REAL','\n', 'Hi', '<--', '1.2','\n', 'INPUT', 'Number', '\n', '\n', 'IF', 'Number', '+', 'Hi', '>', '3','\n', '\t', 'THEN', '\n', '\t', '\t', 'OUTPUT', '"Hello"']
【问题讨论】:
-
[item for item in self.source_code.split() if item]? -
"foobar <-- 2.3+4.42"应该分成什么?我猜["foobar", "<--", "2.3", "+", "4.2"]?在这种情况下,普通的.split()可能不会这样做...... -
@Kevin 说得对
-
您可能需要单独处理表达式。也许按照上面的方法得到 3 个部分并用answers here 之类的东西处理表达式
-
你将如何消除
i<--j的歧义?假设您允许预先递减,这可能意味着i := j或j := j-1; i < j