diff options
Diffstat (limited to 'input.lisp')
-rw-r--r-- | input.lisp | 57 |
1 files changed, 12 insertions, 45 deletions
@@ -1,53 +1,20 @@ (in-package #:monparser) -(defclass input () - ((cursor :initarg :cursor :accessor cursor :initform 0) - (file :initarg :file :reader file :initform nil) - (data :initarg :data :reader data :initform nil))) +(defclass parser-input () + ((cursor :initarg :cursor :accessor input-cursor :initform 0) + (data :initarg :data :reader input-data :initform nil))) (defun has-data? (input) - (< (cursor input) (length (data input)))) - -(defun prefix? (target input) - (string= target - (data input) - :start2 (cursor input) - :end2 (min (+ (cursor input) (length target)) - (length (data input))))) + (< (input-cursor input) (length (input-data input)))) (defun peek (input) - (char (data input) - (cursor input))) - -(defun advance (input &optional (amount 1)) - (make-instance 'input - :data (data input) - :file (file input) - :cursor (+ (cursor input) amount))) - -(defun input-sub (input1 input2) - (- (cursor input1) (cursor input2))) - -(defun from-string (str) - (make-instance 'input :data str)) - -(defun read-file (path) - (with-open-file (file path) - (let* ((size (file-length file)) - (buf (make-string size))) - (read-sequence buf file) - buf))) + (char (input-data input) + (input-cursor input))) -(defun from-file (filename) - (make-instance 'input :file filename :data (read-file filename))) +(defun advance (input) + (make-instance 'parser-input + :data (input-data input) + :cursor (+ (input-cursor input) 1))) -(defun line-and-column (input) - (let ((line 1) (column 1)) - (dotimes (i (cursor input)) - (let ((c (char (data input) i))) - (case c - (#\Newline - (incf line) - (setf column 1)) - (t (incf column))))) - (values line column))) +(defun cursor-distance (input1 input2) + (- (input-cursor input1) (input-cursor input2))) |