我正在尝试在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"']
最佳答案
通过稍微修改Elegant Odoo的代码,我设法找到了解决方案。
split_pattern = '(<--|[\+\-\*\(\)/%:\{\},\[\]<>=(\n)(\t) ]|(?<!\d)[.](?!\d))'
word_list = re.split(split_pattern, self.source_code)
word_list = [elem for elem in word_list if (elem != '' and elem != ' ')]
关于python - 正则表达式匹配除“<-”以外的所有非字母数字字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57928697/