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# -----------------------------------------------------------------------------
162632Sstever@eecs.umich.edu
174479Sbinkertn@umich.eduimport sys
184479Sbinkertn@umich.edusys.path.insert(0,"../..")
194479Sbinkertn@umich.edu
204479Sbinkertn@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)
356498Snate@binkert.org
362632Sstever@eecs.umich.edu    t.value = t.value[i+1:i+1+n]
376498Snate@binkert.org    return t
386498Snate@binkert.org
392632Sstever@eecs.umich.edudef t_error(t):
406498Snate@binkert.org    print("Illegal character '%s'" % t.value[0])
414479Sbinkertn@umich.edu    t.lexer.skip(1)
426498Snate@binkert.org
432632Sstever@eecs.umich.edu# Build the lexer
444479Sbinkertn@umich.eduimport ply.lex as lex
452632Sstever@eecs.umich.edulex.lex()
462632Sstever@eecs.umich.edulex.runmain()
472632Sstever@eecs.umich.edu
482632Sstever@eecs.umich.edu
49