Mercurial > repo
comparison ply-3.8/test/lex_hedit.py @ 7267:343ff337a19b
<ais523> ` tar -xf ply-3.8.tar.gz
author | HackBot |
---|---|
date | Wed, 23 Mar 2016 02:40:16 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
7266:61a39a120dee | 7267:343ff337a19b |
---|---|
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 |