python实现词法分析
2013-09-18 18:59
120 查看
#请先安装Ply
# -*- coding: utf-8 -*- #-------------------------------------------------------------------------- #Author:Jmdebugger #email: pengkailb@gmail.com #date: 2013-9-17 #-------------------------------------------------------------------------- import ply.lex as lex tokens = [ "TOKEN_IDENT", "TOKEN_INT", "TOKEN_FLOAT", "TOKEN_STRING", "TOKEN_OP", "TOKEN_DELIM_COMMA", #, "TOKEN_DELIM_OPEN_PAREN", #( "TOKEN_DELIM_CLOSE_PAREN", #) "TOKEN_DELIM_OPEN_BRACKET", #[ "TOKEN_DELIM_CLOSE_BRACKET",#] "TOKEN_DELIM_OPEN_BRACE", #{ "TOKEN_DELIM_CLOSE_BRACE", #} "TOKEN_DELIM_SEMICOLON" #; ] reserved = { 'if' : 'TOKEN_RSRVD_IF', 'else' : 'TOKEN_RSRVD_ELSE', 'true' : 'TOKEN_RSRVD_TRUE', 'false' : 'TOKEN_RSRVD_FALSE', 'while' : 'TOKEN_RSRVD_WHILE', 'break' : 'TOKEN_RSRVD_BREAK', 'continue': 'TOKEN_RSRVD_CONTINUE', 'goto' : 'TOKEN_RSRVD_GOTO', 'func' : 'TOKEN_RSRVD_FUNC', 'var' : 'TOKEN_RSRVD_VAR', 'for' : 'TOKEN_RSRVD_FOR', 'return' : 'TOKEN_RSRVD_RETURN' } tokens += reserved .values() t_ignore = r' \t\r' def t_COMMENT(t): r'(/\*(.|\n)*?\*/)|(\/\/.*)' pass def t_newline(t): r'\n+' t.lexer.lineno += len(t.value) def t_error(t): print "LaunchScript error: "+repr(t.value) def t_TOKEN_IDENT(t): r'[a-zA-Z_][a-zA-Z_0-9]*' #标识符 t.type = reserved.get(t.value , 'TOKEN_IDENT') return t def t_TOKEN_INT(t): r'(0x[a-fA-F0-9]+)|([0-9]+)' return t t_TOKEN_FLOAT = r'[0-9]*\.[0-9]+' t_TOKEN_STRING = r'(\"([^\\\r]|(\\.))*?\")' #|(\"([^\\\n]|(\\.))*?\")' only for windows t_TOKEN_DELIM_COMMA = r'\,' t_TOKEN_DELIM_OPEN_PAREN = r'\(' t_TOKEN_DELIM_CLOSE_PAREN = r'\)' t_TOKEN_DELIM_OPEN_BRACKET = r'\[' t_TOKEN_DELIM_CLOSE_BRACKET = r'\]' t_TOKEN_DELIM_OPEN_BRACE = r'\{' t_TOKEN_DELIM_CLOSE_BRACE = r'\}' t_TOKEN_DELIM_SEMICOLON = r'\;' def t_TOKEN_OP(t): r'(\<\<\=)|(\>\>\=)|([\+\-\*\/\%\&\|\^\=\!\>\<]\=)|(\|\|)|(\&\&)|(\+\+)|(\-\-)|[\+\-\*\/\%\^\=\&\|\>\<\!\~]' return t if __name__ == "__main__": lexer = lex.lex() f = open("./test.txt" , 'rb') data = f.read() f.close() lexer.input(data) while True: tok = lexer.token() if not tok: break # No more input print tok.value+"\t---->\t"+tok.type
相关文章推荐
- 几种排序算法分析及python实现
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- 常用排序算法的python实现和性能分析
- python实现apahce网站日志分析示例
- 常用排序算法的python实现和性能分析
- [置顶] 【二分-kMeans算法】二分K均值聚类分析与Python代码实现
- python实现自动监测目标网站的爬取速度_以及整体网络环境分析
- Python实现列表删除重复元素的三种常用方法分析
- 用70行代码实现日志分析程序-python
- Python使用Com组件及Access查询分析类实现
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(Python)
- 人工智能:python 实现 第十一章 股票市场分析
- ID3决策树原理分析及python实现
- python协程的实现(greenlet源码分析)
- python中顺序查找分析和实现
- python实现马耳可夫链算法实例分析
- Python实现的插入排序算法原理与用法实例分析
- Python实现运行其他程序的四种方式实例分析
- Python 单链表的实现和自带 List分析
- <基础原理进阶>机器学习算法python实现【3】--文本分析之朴素贝叶斯分类器