[climacs-cvs] CVS update: climacs/prolog-syntax.lisp
Christophe Rhodes
crhodes at common-lisp.net
Mon Apr 4 19:09:50 UTC 2005
Update of /project/climacs/cvsroot/climacs
In directory common-lisp.net:/tmp/cvs-serv32465
Modified Files:
prolog-syntax.lisp
Log Message:
get [] and {} more right.
* separate SYNTACTIC-LEXEME from CANONICAL-NAME, which latter is defined
also for empty-list and curly-brackets as well as NAMEs and OPs
NOTE NOTE NOTE: giving [] and {} canonical names of "[]" and "{}" is
in fact wrong, as '[]' and '{}' should not be equal to [] and {}.
Date: Mon Apr 4 21:09:49 2005
Author: crhodes
Index: climacs/prolog-syntax.lisp
diff -u climacs/prolog-syntax.lisp:1.8 climacs/prolog-syntax.lisp:1.9
--- climacs/prolog-syntax.lisp:1.8 Mon Apr 4 17:46:31 2005
+++ climacs/prolog-syntax.lisp Mon Apr 4 21:09:49 2005
@@ -443,14 +443,21 @@
(defclass atom (prolog-nonterminal)
((value :initarg :value :accessor value)))
-(defmethod syntactic-lexeme ((thing atom))
- (syntactic-lexeme (value thing)))
+(defmethod canonical-name ((thing atom))
+ (canonical-name (value thing)))
+(defmethod canonical-name ((thing name))
+ ;; FIXME: should canonize
+ (lexeme-string (syntactic-lexeme thing)))
(defclass empty-list (prolog-nonterminal)
(([ :initarg :[ :accessor [)
(] :initarg :] :accessor ])))
+(defmethod canonical-name ((thing empty-list))
+ "[]")
(defclass curly-brackets (prolog-nonterminal)
(({ :initarg :{ :accessor {)
(} :initarg :} :accessor })))
+(defmethod canonical-name ((thing curly-brackets))
+ "{}")
(defmethod display-parse-tree ((entity atom) (syntax prolog-syntax) pane)
(display-parse-tree (value entity) syntax pane))
(defmethod display-parse-tree ((entity empty-list) (syntax prolog-syntax) pane)
@@ -538,8 +545,8 @@
((name :initarg :name :accessor name)
(priority :initarg :priority :accessor priority)
(specifier :initarg :specifier :accessor specifier)))
-(defmethod syntactic-lexeme ((thing op))
- (syntactic-lexeme (name thing)))
+(defmethod canonical-name ((thing op))
+ (canonical-name (name thing)))
(defclass prefix-op (op) ())
(defclass binary-op (op) ())
(defclass postfix-op (op) ())
@@ -581,7 +588,7 @@
;;; 6.2.1.1
(defun term-directive-p (term)
(and (compound-term-p term)
- (string= (lexeme-string (syntactic-lexeme (functor term))) ":-")
+ (string= (canonical-name (functor term)) ":-")
(= (arity term) 1)))
(define-prolog-rule (directive -> (directive-term end))
@@ -601,8 +608,7 @@
;;; 6.3.1.2
(define-prolog-rule (term -> ((atom
- (string= (lexeme-string (syntactic-lexeme atom))
- "-"))
+ (string= (canonical-name atom) "-"))
integer))
;; FIXME: this doesn't really look right.
(make-instance 'constant-term :priority 0 :value (list atom integer)))
@@ -715,14 +721,14 @@
(make-instance 'postfix-operator-compound-lterm :priority (priority op)
:left term :operator op)))
(define-prolog-rule (term -> ((op (eql (specifier op) :fy)) term))
- (when (and (or (not (string= (lexeme-string (syntactic-lexeme op)) "-"))
+ (when (and (or (not (string= (canonical-name op) "-"))
(not (numeric-constant-p term)))
(not (typep (first-lexeme term) 'open-ct-lexeme))
(<= (priority term) (priority op)))
(make-instance 'prefix-operator-compound-term
:right term :operator op :priority (priority op))))
(define-prolog-rule (lterm -> ((op (eql (specifier op) :fx)) term))
- (when (and (or (not (string= (lexeme-string (syntactic-lexeme op)) "-"))
+ (when (and (or (not (string= (canonical-name op) "-"))
(not (numeric-constant-p term)))
(not (typep (first-lexeme term) 'open-ct-lexeme))
(< (priority term) (priority op)))
@@ -805,7 +811,7 @@
(def 50 :xfx ":"))
(defun find-predefined-operator (name specifiers)
- (find (lexeme-string (syntactic-lexeme name))
+ (find (canonical-name name)
(remove-if-not (lambda (x) (member (opspec-specifier x) specifiers))
*predefined-operators*)
:key #'opspec-name :test #'string=))
More information about the Climacs-cvs
mailing list