comparison lisp/cedet/semantic/bovine/debug.el @ 104452:688cf3b99678

lisp/cedet/semantic/bovine/c-by.el lisp/cedet/semantic/bovine/c.el lisp/cedet/semantic/bovine/debug.el lisp/cedet/semantic/bovine/el.el lisp/cedet/semantic/bovine/gcc.el lisp/cedet/semantic/bovine/java.el lisp/cedet/semantic/bovine/make-by.el lisp/cedet/semantic/bovine/make.el lisp/cedet/semantic/bovine/scm-by.el lisp/cedet/semantic/bovine/scm.el: New files.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 05 Sep 2009 20:47:41 +0000
parents
children 378a76e12c8e
comparison
equal deleted inserted replaced
104451:2858c6bcc446 104452:688cf3b99678
1 ;;; semantic/bovine/debug.el --- Debugger support for bovinator
2
3 ;;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5 ;; Author: Eric M. Ludlam <zappo@gnu.org>
6
7 ;; This file is part of GNU Emacs.
8
9 ;; GNU Emacs is free software: you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation, either version 3 of the License, or
12 ;; (at your option) any later version.
13
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22 ;;; Commentary:
23 ;;
24 ;; Implementation of the semantic debug support framework for the
25 ;; bovine parser.
26 ;;
27
28 (require 'semantic/debug)
29 (require 'semantic/find)
30
31 ;;; Code:
32
33 ;;; Support a frame for the Bovinator
34 ;;
35 (defclass semantic-bovine-debug-frame (semantic-debug-frame)
36 ((nonterm :initarg :nonterm
37 :type symbol
38 :documentation
39 "The name of the semantic nonterminal for this frame.")
40 (rule :initarg :rule
41 :type number
42 :documentation
43 "The index into NONTERM's rule list. 0 based.")
44 (match :initarg :match
45 :type number
46 :documentation
47 "The index into NONTERM's RULE's match. 0 based..")
48 (collection :initarg :collection
49 :type list
50 :documentation
51 "List of things matched so far.")
52 (lextoken :initarg :lextoken
53 :type list
54 :documentation
55 "A Token created by `semantic-lex-token'.
56 This is the lexical token being matched by the parser.")
57 )
58 "Debugger frame representation for the bovinator.")
59
60 (defun semantic-bovine-debug-create-frame (nonterm rule match collection
61 lextoken)
62 "Create one bovine frame.
63 NONTERM is the name of a rule we are currently parsing.
64 RULE is the index into the list of rules in NONTERM.
65 MATCH is the index into the list of matches in RULE.
66 For example:
67 this: that
68 | other thing
69 | here
70 ;
71 The NONTERM is THIS.
72 The RULE is for \"thing\" is 1.
73 The MATCH for \"thing\" is 1.
74 COLLECTION is a list of `things' that have been matched so far.
75 LEXTOKEN, is a token returned by the lexer which is being matched."
76 (let ((frame (semantic-bovine-debug-frame "frame"
77 :nonterm nonterm
78 :rule rule
79 :match match
80 :collection collection
81 :lextoken lextoken)))
82 (semantic-debug-set-frame semantic-debug-current-interface
83 frame)
84 frame))
85
86 (defmethod semantic-debug-frame-highlight ((frame semantic-debug-frame))
87 "Highlight one parser frame."
88 (let* ((nonterm (oref frame nonterm))
89 (pb (oref semantic-debug-current-interface parser-buffer))
90 (start (semantic-brute-find-tag-by-class 'start pb))
91 )
92 ;; Make sure we get a good rule name, and that it is a string
93 (if (and (eq nonterm 'bovine-toplevel) start)
94 (setq nonterm (semantic-tag-name (car start)))
95 (setq nonterm (symbol-name nonterm)))
96
97 (semantic-debug-highlight-rule semantic-debug-current-interface
98 nonterm
99 (oref frame rule)
100 (oref frame match))
101 (semantic-debug-highlight-lexical-token semantic-debug-current-interface
102 (oref frame lextoken))
103 ))
104
105 (defmethod semantic-debug-frame-info ((frame semantic-debug-frame))
106 "Display info about this one parser frame."
107 (message "%S" (oref frame collection))
108 )
109
110 ;;; Lisp error thrown frame.
111 ;;
112 (defclass semantic-bovine-debug-error-frame (semantic-debug-frame)
113 ((condition :initarg :condition
114 :documentation
115 "An error condition caught in an action.")
116 )
117 "Debugger frame representaion of a lisp error thrown during parsing.")
118
119 (defun semantic-create-bovine-debug-error-frame (condition)
120 "Create an error frame for bovine debugger.
121 Argument CONDITION is the thrown error condition."
122 (let ((frame (semantic-bovine-debug-error-frame "frame"
123 :condition condition)))
124 (semantic-debug-set-frame semantic-debug-current-interface
125 frame)
126 frame))
127
128 (defmethod semantic-debug-frame-highlight ((frame semantic-bovine-debug-error-frame))
129 "Highlight a frame from an action."
130 ;; How do I get the location of the action in the source buffer?
131 )
132
133 (defmethod semantic-debug-frame-info ((frame semantic-bovine-debug-error-frame))
134 "Display info about the error thrown."
135 (message "Error: %S" (oref frame condition)))
136
137 ;;; Parser support for the debugger
138 ;;
139 (defclass semantic-bovine-debug-parser (semantic-debug-parser)
140 (
141 )
142 "Represents a parser and its state.")
143
144
145 (provide 'semantic/bovine/debug)
146
147 ;;; semantic/bovine/debug.el ends here