12632Sstever@eecs.umich.edu# ----------------------------------------------------------------------------- 22632Sstever@eecs.umich.edu# hedit.py 32632Sstever@eecs.umich.edu# 42632Sstever@eecs.umich.edu# Paring of Fortran H Edit descriptions (Contributed by Pearu Peterson) 52632Sstever@eecs.umich.edu# 62632Sstever@eecs.umich.edu# These tokens can't be easily tokenized because they are of the following 72632Sstever@eecs.umich.edu# form: 82632Sstever@eecs.umich.edu# 92632Sstever@eecs.umich.edu# nHc1...cn 102632Sstever@eecs.umich.edu# 112632Sstever@eecs.umich.edu# where n is a positive integer and c1 ... cn are characters. 122632Sstever@eecs.umich.edu# 132632Sstever@eecs.umich.edu# This example shows how to modify the state of the lexer to parse 142632Sstever@eecs.umich.edu# such tokens 152632Sstever@eecs.umich.edu# ----------------------------------------------------------------------------- 164479Sbinkertn@umich.eduimport sys 176498Snate@binkert.orgif ".." not in sys.path: sys.path.insert(0,"..") 184479Sbinkertn@umich.edu 194479Sbinkertn@umich.eduimport ply.lex as lex 202632Sstever@eecs.umich.edu 212632Sstever@eecs.umich.edutokens = ( 222632Sstever@eecs.umich.edu 'H_EDIT_DESCRIPTOR', 232632Sstever@eecs.umich.edu ) 242632Sstever@eecs.umich.edu 252632Sstever@eecs.umich.edu# Tokens 262632Sstever@eecs.umich.edut_ignore = " \t\n" 272632Sstever@eecs.umich.edu 282632Sstever@eecs.umich.edudef t_H_EDIT_DESCRIPTOR(t): 292632Sstever@eecs.umich.edu r"\d+H.*" # This grabs all of the remaining text 302632Sstever@eecs.umich.edu i = t.value.index('H') 312632Sstever@eecs.umich.edu n = eval(t.value[:i]) 326498Snate@binkert.org 332632Sstever@eecs.umich.edu # Adjust the tokenizing position 342632Sstever@eecs.umich.edu t.lexer.lexpos -= len(t.value) - (i+1+n) 352632Sstever@eecs.umich.edu t.value = t.value[i+1:i+1+n] 366498Snate@binkert.org return t 376498Snate@binkert.org 382632Sstever@eecs.umich.edudef t_error(t): 396498Snate@binkert.org print("Illegal character '%s'" % t.value[0]) 404479Sbinkertn@umich.edu t.lexer.skip(1) 416498Snate@binkert.org 422632Sstever@eecs.umich.edu# Build the lexer 432632Sstever@eecs.umich.edulex.lex() 442632Sstever@eecs.umich.edulex.runmain(data="3Habc 10Habcdefghij 2Hxy") 452632Sstever@eecs.umich.edu 462632Sstever@eecs.umich.edu 472632Sstever@eecs.umich.edu 48