summaryrefslogtreecommitdiffstats
path: root/chall/ply-2.2/example/hedit/hedit.py
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2024-03-14 21:30:16 +0100
committerLouis Burda <quent.burda@gmail.com>2024-03-14 21:30:16 +0100
commit4007ea18f294aefb6128cbe82c5446cd8cb72c50 (patch)
tree0d6e38d202ac7be9a59192cd881a4de5d1713a71 /chall/ply-2.2/example/hedit/hedit.py
downloadcscg24-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.py48
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()
+
+