我正在尝试在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/

10-09 01:38