[用python自制编程语言]第4篇

前言

我做过一个编程语言:mylang

开始

上代码

def split_subBlocks(block):
    subBlocks = []
    cnt = 0
    buf = ''
    flag = False
    for i in block:
        if(i == '{'):
            cnt += 1
            flag = True
        elif(i == '}'):
            cnt -= 1
            flag = True
        if(cnt == 0 and flag):
            subBlocks.append(buf)
            buf = ''
            flag = False
        else:
            buf += i
    subBlocks[-1] += '}'
    return subBlocks
# ......N行之后......
def parse_if(block):
    subBlocks = split_subBlocks(block)
    if(subBlocks[0] == 'error'):
        return subBlocks
    for i in subBlocks:
        if(i.startswith('if')):
            foo = i.split('\n')[0][3:-2]
        elif(i.startswith('elsif')):
            foo = i.split('\n')[0][6:-2]
        elif(i.startswith('else')):
            foo = 'true'
        else:
            return ['error','IfSentenceError:find undefined branch head']
        code = [j.strip() for j in i.split('\n')[1:-1]]
        F = comp(foo)
        if(F[0] == 'error'):
            return F
        if(F[0]):
            for i in code:
                val = comp(i)
                if(val[0] == 'error'):
                    return val
            return ['']
    return ['']

参数
block:代码

一开始
    subBlocks = split_subBlocks(block)
    if(subBlocks[0] == 'error'):
        return subBlocks

这里将if、elsif和else每一块分开,看split_subBlocks的代码:

def split_subBlocks(block):
   subBlocks = []
   cnt = 0
   buf = ''
   flag = False
   for i in block:
       if(i == '{'):
         cnt += 1
           flag = True
       elif(i == '}'):
           cnt -= 1
           flag = True
       if(cnt == 0 and flag):
           subBlocks.append(buf)
           buf = ''
           flag = False
       else:
           buf += i
   subBlocks[-1] += '}'
   return subBlocks

第一部分

def split_subBlocks(block):
   subBlocks = []
   cnt = 0
   buf = ''

这里在定义变量subBlocks(字块)、cnt(待配对的打括号数量)、buf(尚未分段的语句)



第二部分

for i in block:
       if(i == '{'):
         cnt += 1
           flag = True
       elif(i == '}'):
           cnt -= 1
           flag = True
       if(cnt == 0 and flag):
           subBlocks.append(buf)
           buf = ''
           flag = False
       else:
           buf += i

第二-1部分

       if(i == '{'):
         cnt += 1
           flag = True
       elif(i == '}'):
           cnt -= 1
           flag = True

统计大括号的数量


第二-2部分

       if(cnt == 0 and flag):
           subBlocks.append(buf)
           buf = ''
           flag = False

如果可以分段,分段


第二-3部分

      else:
          buf += i

如果不能分段,将其记为未分段的语句

后面
    for i in subBlocks:
        if(i.startswith('if')):
            foo = i.split('\n')[0][3:-2]
        elif(i.startswith('elsif')):
            foo = i.split('\n')[0][6:-2]
        elif(i.startswith('else')):
            foo = 'true'
        else:
            return ['error','IfSentenceError:find undefined branch head']

对这一段的段头进行分析

继续
        code = [j.strip() for j in i.split('\n')[1:-1]]
        F = comp(foo)
        if(F[0] == 'error'):
            return F
        if(F[0]):
            for i in code:
                val = comp(i)
                if(val[0] == 'error'):
                    return val
            return ['']
    return ['']

执行程序
这里由之前的基础,应该不难理解

总结一下

总结一下:

Created with Raphaël 2.2.0 开始 分割代码块 遍历代码块 若块头为if 获取条件 执行代码 若还有代码块未执行 结束 若块头为elsif 获取条件 若块头为else 设条件为true 报错 yes no yes no yes no yes no

作者

hit-road

拜拜,下课!

hit-road不定期跟新,不见不散!

自制一门编程语言是一项非常有挑战性的任务,但使用Python可以相对容易地实现一个简单的解释型编程语言。下面是一个简单的示例,展示了如何使用Python来实现一个自制编程语言: ```python # 定义一个解释器类 class Interpreter: def __init__(self): self.variables = {} # 存储变量的字典 # 解释执行代码 def interpret(self, code): lines = code.split('\n') # 按行分割代码 for line in lines: if line.startswith('print'): # 处理print语句 self.print_statement(line) elif '=' in line: # 处理赋值语句 self.assignment_statement(line) # 处理print语句 def print_statement(self, line): _, value = line.split('print') value = value.strip() if value.startswith('"') and value.endswith('"'): # 处理字符串 print(value[1:-1]) else: # 处理变量 print(self.variables.get(value)) # 处理赋值语句 def assignment_statement(self, line): variable, value = line.split('=') variable = variable.strip() value = value.strip() if value.isdigit(): # 处理整数 self.variables[variable] = int(value) elif value.startswith('"') and value.endswith('"'): # 处理字符串 self.variables[variable] = value[1:-1] else: # 处理变量赋值 self.variables[variable] = self.variables.get(value) # 创建一个解释器实例 interpreter = Interpreter() # 编写自制语言的代码 code = ''' x = 10 y = "Hello, world!" print(x) print(y) ''' # 解释执行代码 interpreter.interpret(code) ``` 这个示例展示了一个简单的解释型编程语言,它支持变量赋值和打印语句。你可以根据自己的需求扩展这个语言,添加更多的功能和语法规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值