diff options
| author | Louis Burda <quent.burda@gmail.com> | 2024-03-14 21:30:16 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2024-03-14 21:30:16 +0100 |
| commit | 4007ea18f294aefb6128cbe82c5446cd8cb72c50 (patch) | |
| tree | 0d6e38d202ac7be9a59192cd881a4de5d1713a71 /chall/ply-2.2/example/hedit/hedit.py | |
| download | cscg24-lolpython-4007ea18f294aefb6128cbe82c5446cd8cb72c50.tar.gz cscg24-lolpython-4007ea18f294aefb6128cbe82c5446cd8cb72c50.zip | |
Add solution
Diffstat (limited to 'chall/ply-2.2/example/hedit/hedit.py')
| -rw-r--r-- | chall/ply-2.2/example/hedit/hedit.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/chall/ply-2.2/example/hedit/hedit.py b/chall/ply-2.2/example/hedit/hedit.py new file mode 100644 index 0000000..a3c58c7 --- /dev/null +++ b/chall/ply-2.2/example/hedit/hedit.py @@ -0,0 +1,48 @@ +# ----------------------------------------------------------------------------- +# hedit.py +# +# Paring of Fortran H Edit descriptions (Contributed by Pearu Peterson) +# +# These tokens can't be easily tokenized because they are of the following +# form: +# +# nHc1...cn +# +# where n is a positive integer and c1 ... cn are characters. +# +# This example shows how to modify the state of the lexer to parse +# such tokens +# ----------------------------------------------------------------------------- + +import sys +sys.path.insert(0,"../..") + + +tokens = ( + 'H_EDIT_DESCRIPTOR', + ) + +# Tokens +t_ignore = " \t\n" + +def t_H_EDIT_DESCRIPTOR(t): + r"\d+H.*" # This grabs all of the remaining text + i = t.value.index('H') + n = eval(t.value[:i]) + + # Adjust the tokenizing position + t.lexer.lexpos -= len(t.value) - (i+1+n) + + t.value = t.value[i+1:i+1+n] + return t + +def t_error(t): + print "Illegal character '%s'" % t.value[0] + t.lexer.skip(1) + +# Build the lexer +import ply.lex as lex +lex.lex() +lex.runmain() + + |
