Advertisement
Guest User

hylang example

a guest
Mar 15th, 2017
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.85 KB | None | 0 0
  1. (import sys re)
  2.  
  3. (defmacro proplist [obj &rest props]
  4.   (list (map (fn [prop]
  5.                `(. ~obj ~prop))
  6.              props)))
  7.  
  8. (defclass Tableline [object]
  9.   [target-pos 0
  10.    traj-speed 0
  11.    zprivod 0
  12.    error 0
  13.    real-speed 0
  14.    ready False
  15.    rules
  16.          [(, "Axis 2 point:.* calculated: (-?[1234567890]+)" [(, int "target_pos")])
  17.           (, "At point: azimuth speed = (-?[1234567890]+);" [(, int "traj_speed")])
  18.           (, "Tracking axis 2: Zprivod = (-?[1234567890]+), error = (-?[1234567890]+)"
  19.              [(, int "zprivod") (, int "error")])
  20.           (, "Axis 2 real speed: (-?[1234567890.]+)" [(, float "real_speed")])]]
  21.   (defn get-rule [self]
  22.     (while True
  23.       (setv (. self ready) False)
  24.       (for [r (butlast (. self rules))]
  25.         (yield r)
  26.         (else (do
  27.                (setv (. self ready) True)
  28.                (yield (last (. self rules))))))))
  29.  
  30.   (defn --str-- [self]
  31.     (let [fstring "{}; {}; {}; {}; {};\n"]
  32.       (apply fstring.format
  33.              (proplist self
  34.                        target-pos
  35.                        traj-speed
  36.                        zprivod
  37.                        error
  38.                        real-speed)))))
  39.  
  40. (defmain [&rest args]
  41.   (setv inname (get args 1))
  42.   (setv outname (get args 2))
  43.   (with [ifile (open inname 'r')]
  44.     (with [ofile (open outname 'w')]
  45.       (setv tl (Tableline))
  46.       (setv irule (iter (.get-rule tl)))
  47.       (setv rule (.next irule))
  48.       (for [line ifile]
  49.         (setv match (re.match (get rule 0) line))
  50.         (when match
  51.           (for [(, group-num attr-data) (enumerate (get rule 1))]
  52.             (setattr tl (get attr-data 1) (apply (get attr-data 0)
  53.                                                  [(.group match (inc group-num))])))
  54.           (if (. tl ready) (write ofile (str tl)))
  55.           (setv rule (.next irule)))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement