OLD | NEW |
(Empty) | |
| 1 # ----------------------------------------------------------------------------- |
| 2 # hedit.py |
| 3 # |
| 4 # Paring of Fortran H Edit descriptions (Contributed by Pearu Peterson) |
| 5 # |
| 6 # These tokens can't be easily tokenized because they are of the following |
| 7 # form: |
| 8 # |
| 9 # nHc1...cn |
| 10 # |
| 11 # where n is a positive integer and c1 ... cn are characters. |
| 12 # |
| 13 # This example shows how to modify the state of the lexer to parse |
| 14 # such tokens |
| 15 # ----------------------------------------------------------------------------- |
| 16 import sys |
| 17 if ".." not in sys.path: sys.path.insert(0,"..") |
| 18 |
| 19 import ply.lex as lex |
| 20 |
| 21 tokens = ( |
| 22 'H_EDIT_DESCRIPTOR', |
| 23 ) |
| 24 |
| 25 # Tokens |
| 26 t_ignore = " \t\n" |
| 27 |
| 28 def t_H_EDIT_DESCRIPTOR(t): |
| 29 r"\d+H.*" # This grabs all of the remaining text |
| 30 i = t.value.index('H') |
| 31 n = eval(t.value[:i]) |
| 32 |
| 33 # Adjust the tokenizing position |
| 34 t.lexer.lexpos -= len(t.value) - (i+1+n) |
| 35 t.value = t.value[i+1:i+1+n] |
| 36 return t |
| 37 |
| 38 def t_error(t): |
| 39 print("Illegal character '%s'" % t.value[0]) |
| 40 t.lexer.skip(1) |
| 41 |
| 42 # Build the lexer |
| 43 lex.lex() |
| 44 lex.runmain(data="3Habc 10Habcdefghij 2Hxy") |
| 45 |
| 46 |
| 47 |
OLD | NEW |