当前位置: 首页>>代码示例>>Python>>正文


Python Lexer.reset方法代码示例

本文整理汇总了Python中Lexer.Lexer.reset方法的典型用法代码示例。如果您正苦于以下问题:Python Lexer.reset方法的具体用法?Python Lexer.reset怎么用?Python Lexer.reset使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Lexer.Lexer的用法示例。


在下文中一共展示了Lexer.reset方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: Parser

# 需要导入模块: from Lexer import Lexer [as 别名]
# 或者: from Lexer.Lexer import reset [as 别名]
class Parser(object):
	def __init__(self):
		self.lexer = Lexer(error_callback=self._lexer_error)
		self.tokens = self.lexer.tokens

		self.parser = yacc.yacc(module=self)

	def parse(self, text):
		self.lexer.reset()
		return self.parser.parse(text + "\n", lexer=self.lexer)

	def _lexer_error(self, errorMsg):
		raise ParseError(errorMsg)

	#Grammar
	def p_asm_file(self, p):
		''' asm_file    : asm_line
						| asm_file asm_line
		'''
		# skip empty lines
		if len(p) >= 3:
			p[0] = p[1] + [p[2]] if p[2] else p[1]
		else:
			p[0] = [p[1]] if p[1] else []
	
	def p_asm_line_1(self, p):
		''' asm_line    : empty_line 
						| directive NEWLINE 
						| instruction NEWLINE
		'''
		p[0] = p[1]
	
	def p_asm_line_2(self, p):
		''' asm_line : label_def NEWLINE '''
		p[0] = Instruction(
			label=p[1].label,
			name=None,
			args=[],
			lineno=p[1].lineno)
	
	def p_empty_line(self, p):
		''' empty_line : NEWLINE '''
		p[0] = None
	
	def p_directive_1(self, p):
		''' directive : label_def DIRECTIVE arguments_opt '''
		p[0] = Directive(
			label=p[1].label,
			name=p[2],
			args=p[3],
			lineno=p.lineno(2))

	def p_directive_2(self, p):
		''' directive : DIRECTIVE arguments_opt '''
		p[0] = Directive(
			label=None,
			name=p[1],
			args=p[2],
			lineno=p.lineno(1))    
	
	def p_instruction_1(self, p):
		''' instruction     : label_def ID arguments_opt '''
		p[0] = Instruction(
			label=p[1].label,
			name=p[2],
			args=p[3],
			lineno=p.lineno(2))
	
	def p_instruction_2(self, p):
		''' instruction     : ID arguments_opt '''
		p[0] = Instruction(
			label=None,
			name=p[1],
			args=p[2],
			lineno=p.lineno(1))
	
	def p_label_def(self, p):
		''' label_def   : ID COLON '''
		p[0] = LabelDef(p[1], p.lineno(1))
	
	def p_arguments_opt(self, p):
		''' arguments_opt   : arguments
							|
		'''
		p[0] = p[1] if len(p) >= 2 else []
	
	def p_arguments_1(self, p):
		''' arguments   : argument '''
		p[0] = [p[1]]
	
	def p_arguments_2(self, p):
		''' arguments   : arguments COMMA argument '''
		p[0] = p[1] + [(p[3])]
	
	def p_argument_1(self, p):
		''' argument    : REGISTER '''
		p[0] = Register(p[1])

	def p_argument_2(self, p):
		''' argument    : ID '''
#.........这里部分代码省略.........
开发者ID:gagiel,项目名称:VM32,代码行数:103,代码来源:Parser.py


注:本文中的Lexer.Lexer.reset方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。