Tag Archives: 词法分析

56 行代码用 Python 实现一个 Flex/Lex

作为 Yacc/Bison 的好搭档 Lex/Flex 是一个很方便的工具,可以通过写几行规则就能生成一个新的词法分析器,大到给你的 parser 提供 token 流,小到解析一个配置文件,都很有帮助;而用 Python 实现一个支持自定义规则的类 Flex/Lex 词法分析器只需要短短 56 行代码,简单拷贝粘贴到你的代码里,让你的代码具备基于可定制规则的词法分析功能。 原理很简单,熟读 Python 文档的同学应该看过 regex module 帮助页面最下面有段程序: def tokenize(code): keywords = {‘IF’, ‘THEN’, ‘ENDIF’, ‘FOR’, ‘NEXT’, ‘GOSUB’, ‘RETURN’} token_specification = [ (‘NUMBER’, r’\d+(\.\d*)?’), # Integer or … Continue reading

Loading

Posted in 编译原理 | Tagged | 6 Comments

Python 中使用组合方式构建复杂正则

正则写复杂了很麻烦,难写难调试,只需要两个函数,就能用简单正则组合构建复杂正则: 比如输入一个字符串规则,可以使用 {name} 引用前面定义的规则: # rules definition rules = r”’ protocol = http|https login_name = [^:@\r\n\t ]+ login_pass = [^@\r\n\t ]+ login = {login_name}(:{login_pass})? host = [^:/@\r\n\t ]+ port = \d+ optional_port = (?:[:]{port})? path = /[^\r\n\t ]* url = … Continue reading

Loading

Posted in 编译原理 | Tagged | 1 Comment

转换 Intel汇编格式到 AT&T汇编风格

常用 MSVC写内嵌汇编需要兼容 GCC是一件头疼的事情,不是说你不会写 GCC的 AT&T风格汇编,而是说同一份代码写两遍,还要调试两遍,是一件头疼的事情,特别是汇编写了上百行的时候。于是五年前写过一个小工具,可以方便的进行转换,能把 MSVC/MASM的汇编转成纯 AT&T风格汇编,或者 GCC Inline风格汇编,自动识别寄存器和变量,还有跳转地址,并且自动导出。今天把他放上来,或许有用到的人吧。

Loading

Posted in 编译原理 | Tagged , , | 1 Comment

[业余土制] Build工具 EasyMake

用最简单的方法描述工程信息,简化gnumake的繁琐操作,让不会用gnumake的同学们彻底解脱: 项目地址:http://code.google.com/p/easymake/  

Loading

Posted in 开源项目, 编程技术, 编译原理 | Tagged | Leave a comment

[业余土制] 实时汇编编译器

实时动态在内存中编译汇编代码,并返回函数调用指针,可用于JIT系统的后端: 项目地址:http://code.google.com/p/asmpure/ 例子: const char *AlphaBlendAsm = “PROC C1:DWORD, C2:DWORD, A:DWORD\n” ” movd mm0, A\n” ” punpcklwd mm0, mm0\n” ” punpckldq mm0, mm0\n” ” pcmpeqb mm7, mm7\n” ” psubw mm7, mm0\n” ” \n” ” punpcklbw mm1, C1\n” ” psrlw mm1, … Continue reading

Loading

Posted in 开源项目, 编程技术, 编译原理 | Tagged , | 3 Comments

虚拟机及VmBasic编译引擎说明

2001-2002 期间开发的虚拟机/编译器开源项目代码和资料: 关于虚拟机及其编译器的说明 VmBasic 开发/调试环境的介绍及说明 关于其他 所有资料可以通过下面地址下载: 下载可执行 源程序下载 设计说明书 关于虚拟机及其编译器的说明 记得 3DS/MAX 里面实现了一个类似 BASIC 的脚本,Animator 里面实现了一个类 C 的脚本语言,Autodesk 公司的软件对于脚本支持的很出色,好的脚本引擎在乎平台无关性、高效性和扩充性,一个脚本引擎的需要对一个好程序来说非常迫切,于是半年前我写了一款虚拟机,最近又实现了一个类 Basic 的脚本编译器,特性说明: 1) 高效性和独立于平台:由于虚拟机运行是解释二进制的字节码因此速度明显快于每次运行及时解释的脚本语言,比如 Perl 和 PHP,而虚拟机的核心程序代码也经过数个 C++编译器和平台的测试,可以毫无修改的编译运行于多个操作系统。 2) 充分的开放:通过虚拟机的端口 I/O 技术,要对它进行扩充变得十分容易,VmBeta 指令通过输出/输入的方法向用户自己的程序进行通讯,用户通过处理输出输入消息来达到功能的扩充,使它符合你产品的需要,具体的虚拟机实现和设计说明参考文档 vmbeta.txt 。 3) 可设安全级别:通过可设置安全级别,对程序运行状态进行监控。 通过半年的修改我自己觉得虚拟机够高效开放,就是 vmbasic 编译器写的没有多高的水准:完全没有对生成代码做优化,弄出许多繁琐的中间代码,不过还是明显快于及时解释语言,通过测试速度大概是 DOS … Continue reading

Loading

Posted in 开源项目, 游戏开发, 编程技术, 编译原理 | Tagged , , | 1 Comment

PL0 编译程序Turbo Pascal代码

麻雀虽小,五脏具全,对编译原理的代码以TPASCAL格式重新整理和排版,还原最原版的代码 编译版和例子下载:  

Loading

Posted in 编程技术, 编译原理 | Tagged , , | 1 Comment