编译原理-词法分析-基于lex实现 python
2022/7/3 1:22:36
本文主要是介绍编译原理-词法分析-基于lex实现 python,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
为了不使用破旧的vc++6.0,我去网上找到了python可以调用的库
PLY库,官方网站是http://www.dabeaz.com/ply/ply.html
同时也参考了文章:https://blog.csdn.net/chosen0ne/article/details/8077880
通过PLY库,我很方便地实现了词法分析,简单快捷。下面把代码贴上来
import ply.lex as lex # 处理保留字 reserved = { 'if': 'IF', 'else': 'ELSE', 'while': 'WHILE', 'default': 'DEFAULT', 'def': 'DEF', 'and': 'AND', 'return': 'RETURN', } tokens = [ 'NUMBER', 'ID', 'special_word', 'error_word' ] + list(reserved.values()) def t_ID(t): r'[a-zA-Z_][a-zA-Z_0-9]*' t.type = reserved.get(t.value, 'ID') # Check for reserved words return t t_special_word = r'\+|-|\*|/|\(|\)|:|\'|=|\[|\]|,' def t_error_word(t): r'[0-9]+[a-zA-Z_]+' print("Illegal character '%s',location:('%d', '%d')" % (t.value, t.lexer.lineno, find_column(data, t))) t.lexer.skip(1) def t_error(t): print("Illegal character '%s',location:('%d', '%d')" % (t.value[0], t.lexer.lineno, find_column(data, t))) t.lexer.skip(1) def t_NUMBER(t): r'[0-9]+' t.value = int(t.value) return t def t_newline(t): r'\n+' t.lexer.lineno += len(t.value) def find_column(input, token): line_start = input.rfind('\n', 0, token.lexpos) + 1 print('start = ', line_start, ' end = ', token.lexpos) return (token.lexpos - line_start) + 1 t_ignore = ' \t' lexer = lex.lex() data = ''' def f_copy(data): data = data + 2 a = [1, 2] for i in range(len(a)): a[i] = f_copy(a[i]) print(a) 1a ''' lexer.input(data) while True: tok = lexer.token() if not tok: break print(tok)
这篇关于编译原理-词法分析-基于lex实现 python的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02Python编程基础
- 2024-11-01Python 基础教程
- 2024-11-01用Python探索可解与不可解方程的问题
- 2024-11-01Python编程入门指南
- 2024-11-01Python编程基础知识
- 2024-11-01Python编程基础
- 2024-10-31Python基础入门:理解变量与数据类型
- 2024-10-30Python股票自动化交易资料详解与实战指南
- 2024-10-30Python入行:新手必读的Python编程入门指南
- 2024-10-30Python入行:初学者必备的编程指南