hedit.py revision 2632
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
172632Sstever@eecs.umich.edutokens = (
182632Sstever@eecs.umich.edu    'H_EDIT_DESCRIPTOR',
192632Sstever@eecs.umich.edu    )
202632Sstever@eecs.umich.edu
212632Sstever@eecs.umich.edu# Tokens
222632Sstever@eecs.umich.edut_ignore = " \t\n"
232632Sstever@eecs.umich.edu
242632Sstever@eecs.umich.edudef t_H_EDIT_DESCRIPTOR(t):
252632Sstever@eecs.umich.edu    r"\d+H.*"                     # This grabs all of the remaining text
262632Sstever@eecs.umich.edu    i = t.value.index('H')
272632Sstever@eecs.umich.edu    n = eval(t.value[:i])
282632Sstever@eecs.umich.edu
292632Sstever@eecs.umich.edu    # Adjust the tokenizing position
302632Sstever@eecs.umich.edu    t.lexer.lexpos -= len(t.value) - (i+1+n)
312632Sstever@eecs.umich.edu
322632Sstever@eecs.umich.edu    t.value = t.value[i+1:i+1+n]
332632Sstever@eecs.umich.edu    return t
342632Sstever@eecs.umich.edu
352632Sstever@eecs.umich.edudef t_error(t):
362632Sstever@eecs.umich.edu    print "Illegal character '%s'" % t.value[0]
372632Sstever@eecs.umich.edu    t.skip(1)
382632Sstever@eecs.umich.edu
392632Sstever@eecs.umich.edu# Build the lexer
402632Sstever@eecs.umich.eduimport lex
412632Sstever@eecs.umich.edulex.lex()
422632Sstever@eecs.umich.edulex.runmain()
432632Sstever@eecs.umich.edu
442632Sstever@eecs.umich.edu
45