随笔分类 -  Compiler

摘要:接上文实现一个编译器 添加了一些内容: 这些是我认为应该有的功能,每个功能实现也不复杂。 现在pym看起来更像是一个脚本语言了。 1 import re 2 from collections import namedtuple 3 import functools 4 5 6 7 # 8 # __a 阅读全文
posted @ 2019-09-16 20:51 backinfile 阅读(269) 评论(0) 推荐(0)
摘要:上一次实现了命令行式的计算器. 这次用python实现一个窗口, 把计算器的代码翻译过来: 1 patterns = { 2 '+': r'(\+)' , 3 '-': r'(-)' , 4 '*': r'(\*)' , 5 '/': r'(/)' , 6 '(': r'(\()' , 7 ')': 阅读全文
posted @ 2017-01-11 12:53 backinfile 阅读(310) 评论(0) 推荐(1)
摘要:最终效果 动态类型, 内置int,str,list,dict(from python), function function执行后可以保留内部的变量. 不想自己实现这么多类型,用python来实现 整个语言基于Auto变量,所以两句话就可以跑起编译器 call会执行几个过程: 1) tokenize 阅读全文
posted @ 2017-01-10 15:05 backinfile 阅读(440) 评论(0) 推荐(0)
摘要:产生原因: (1)一直以来,我都想写一门语言,但无从下手。 (2)我找到了很多编译原理的教程,但始终觉得内容晦涩,理解不了,所以先尝试写一个简单的,比如:计算器。 (3)网上有很多关于计算器的实现,但大多需要有编译原理的基础,对于我这种小白实在难以理解。 (4)我决定采用暴力模拟的方式,需要用正则表 阅读全文
posted @ 2016-12-15 22:19 backinfile 阅读(2497) 评论(1) 推荐(5)
摘要:词法(类python): \w+\b -->NAME '.*'|".*" -->STRING ^\t+ -->TAB ( -->TUPLELEFT ) -->TUPLERIGHT [^\s\w]+ -->SYMBOL 如此简单的词法,暴力模拟就好啦 : ) 语法和翻译还没想好怎么处理。囧 阅读全文
posted @ 2016-10-26 16:00 backinfile 阅读(260) 评论(0) 推荐(0)
摘要:重写了上次的代码 1.将node分为三种,voidchar,char,manychars,分别表示空node,单字符node,多字符node(针对自定义的\w,\n,\a); 2.顺序建树; 3.空节点的父子节点为非空节点,非空节点的父子节点为空节点; 4.空节点有多个子节点,非空节点只有一个子节点 阅读全文
posted @ 2016-09-26 23:44 backinfile 阅读(272) 评论(0) 推荐(0)
摘要:正则表达式 正则表达式的基本语法有三个,连接,或,闭包,分别对应于 ab ,a|b,a* 为了简单起见,添加了\w,\n,\a,分别表示字母,数字,字母+数字 非确定有穷自动机(NFA) 倒序读正则表达式,向多叉树中插入节点(贪心) 阅读全文
posted @ 2016-09-23 14:39 backinfile 阅读(1345) 评论(0) 推荐(0)