anchor.diff:  
   
   (defpackage #:ritucci-msc-ccs-parser
  -  (:use #:common-lisp #:regexp)
  +  (:use #:common-lisp #:ext #:regexp)
     (:export #:parse))
   
   
  
positive.code: 	((parse-prefixing text))
  	((parse-relabelling text))
  	((parse-restriction text))
  	(t nil)))
  
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
negative.code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
  (defun parse-transition (text)
    "Tenta di costruire l'albero sinttico di una transizione.
    Ritorna l'albero se riesce, NIL altrimenti."
    (multiple-value-bind
      (whole-match left-match center-match right-match)
      (match (full-pattern-of *transition-pattern*) text)
  
      (if (and whole-match left-match center-match right-match)
        ;; match-string solo per debug, bisogna chiamare ricorsivamente parse.
        (list (match-string text left-match)
  	    (match-string text center-match)
  	    (match-string text right-match))
        nil)))
  
  
  (defun is-action (text)
    "Ritorna T se text è un'etichetta di un'azione, il suo complementar o tau;
    NIL altrimenti"
    (or (string= text "&")
        (is-label text)))
  
  
  (defun is-label (text)
    "Ritorna T se text è un'etichetta di un'azione o il suo complementare; NIL
    altrimenti"
    (cond ((match (full-pattern-of *label-pattern*) text) t)
  	(t nil)))
  
  
  (defun is-process (text)
    "Ritorna T se text è un processo; NIL altrimenti"
    (cond ((string= text "0") t)
  	((match (full-pattern-of *process-pattern*) text) t)
  	(t nil)))
  