Mercurial > emacs
view lisp/cedet/srecode/srt-wy.el @ 107816:1cba68e0c6f6
* compile.el (compilation-save-buffers-predicate): Add missing :version tag.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Fri, 09 Apr 2010 19:18:09 -0700 |
parents | 1d1d5d9bd884 |
children | 376148b31b5e |
line wrap: on
line source
;;; srecode/srt-wy.el --- Generated parser support file ;; Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; Generated from srecode-template.wy in the CEDET repository. ;;; Code: (require 'semantic/lex) ;;; Prologue ;; ;;; Declarations ;; (defconst srecode-template-wy--keyword-table (semantic-lex-make-keyword-table '(("set" . SET) ("show" . SHOW) ("macro" . MACRO) ("context" . CONTEXT) ("template" . TEMPLATE) ("sectiondictionary" . SECTIONDICTIONARY) ("prompt" . PROMPT) ("default" . DEFAULT) ("defaultmacro" . DEFAULTMACRO) ("read" . READ) ("bind" . BIND)) '(("bind" summary "bind \"<letter>\"") ("read" summary "prompt <symbol> \"Describe Symbol: \" [default[macro] <lispsym>|\"valuetext\"] [read <lispsym>]") ("defaultmacro" summary "prompt <symbol> \"Describe Symbol: \" [default[macro] <lispsym>|\"valuetext\"] [read <lispsym>]") ("default" summary "prompt <symbol> \"Describe Symbol: \" [default[macro] <lispsym>|\"valuetext\"] [read <lispsym>]") ("prompt" summary "prompt <symbol> \"Describe Symbol: \" [default[macro] <lispsym>|\"valuetext\"] [read <lispsym>]") ("sectiondictionary" summary "sectiondictionary <name>\\n <dictionary entries>") ("template" summary "template <name>\\n <template definition>") ("context" summary "context <name>") ("macro" summary "... macro \"string\" ...") ("show" summary "show <name> ; to show a section") ("set" summary "set <name> <value>"))) "Table of language keywords.") (defconst srecode-template-wy--token-table (semantic-lex-make-type-table '(("number" (number)) ("string" (string)) ("symbol" (symbol)) ("property" (property)) ("separator" (TEMPLATE_BLOCK . "^----")) ("newline" (newline))) '(("number" :declared t) ("string" :declared t) ("symbol" :declared t) ("property" :declared t) ("newline" :declared t) ("punctuation" syntax "\\s.+") ("punctuation" :declared t) ("keyword" :declared t))) "Table of lexical tokens.") (defconst srecode-template-wy--parse-table (progn (eval-when-compile (require 'semantic/wisent/comp)) (wisent-compile-grammar '((SET SHOW MACRO CONTEXT TEMPLATE SECTIONDICTIONARY PROMPT DEFAULT DEFAULTMACRO READ BIND newline TEMPLATE_BLOCK property symbol string number) nil (template_file ((newline) nil) ((context)) ((prompt)) ((variable)) ((template))) (context ((CONTEXT symbol newline) (wisent-raw-tag (semantic-tag $2 'context)))) (prompt ((PROMPT symbol string opt-default-fcn opt-read-fcn newline) (wisent-raw-tag (semantic-tag $2 'prompt :text (read $3) :default $4 :read $5)))) (opt-default-fcn ((DEFAULT symbol) (progn (read $2))) ((DEFAULT string) (progn (read $2))) ((DEFAULTMACRO string) (progn (cons 'macro (read $2)))) (nil nil)) (opt-read-fcn ((READ symbol) (progn (read $2))) (nil nil)) (variable ((SET symbol insertable-string-list newline) (wisent-raw-tag (semantic-tag-new-variable $2 nil $3))) ((SHOW symbol newline) (wisent-raw-tag (semantic-tag-new-variable $2 nil t)))) (insertable-string-list ((insertable-string) (list $1)) ((insertable-string-list insertable-string) (append $1 (list $2)))) (insertable-string ((string) (read $1)) ((MACRO string) (cons 'macro (read $2)))) (template ((TEMPLATE templatename opt-dynamic-arguments newline opt-string opt-section-dictionaries TEMPLATE_BLOCK newline opt-bind) (wisent-raw-tag (semantic-tag-new-function $2 nil $3 :documentation $5 :code $7 :dictionaries $6 :binding $9)))) (templatename ((symbol)) ((PROMPT)) ((CONTEXT)) ((TEMPLATE)) ((DEFAULT)) ((MACRO)) ((DEFAULTMACRO)) ((READ)) ((SET))) (opt-dynamic-arguments ((property opt-dynamic-arguments) (cons $1 $2)) (nil nil)) (opt-string ((string newline) (read $1)) (nil nil)) (opt-section-dictionaries (nil nil) ((section-dictionary-list))) (section-dictionary-list ((one-section-dictionary) (list $1)) ((section-dictionary-list one-section-dictionary) (append $1 (list $2)))) (one-section-dictionary ((SECTIONDICTIONARY string newline variable-list) (cons (read $2) $4))) (variable-list ((variable) (wisent-cook-tag $1)) ((variable-list variable) (append $1 (wisent-cook-tag $2)))) (opt-bind ((BIND string newline) (read $2)) (nil nil))) '(template_file))) "Parser table.") (defun srecode-template-wy--install-parser () "Setup the Semantic Parser." (semantic-install-function-overrides '((parse-stream . wisent-parse-stream))) (setq semantic-parser-name "LALR" semantic--parse-table srecode-template-wy--parse-table semantic-debug-parser-source "srecode-template.wy" semantic-flex-keywords-obarray srecode-template-wy--keyword-table semantic-lex-types-obarray srecode-template-wy--token-table) ;; Collect unmatched syntax lexical tokens (semantic-make-local-hook 'wisent-discarding-token-functions) (add-hook 'wisent-discarding-token-functions 'wisent-collect-unmatched-syntax nil t)) ;;; Analyzers ;; (define-lex-keyword-type-analyzer srecode-template-wy--<keyword>-keyword-analyzer "keyword analyzer for <keyword> tokens." "\\(\\sw\\|\\s_\\)+") (define-lex-regex-type-analyzer srecode-template-wy--<symbol>-regexp-analyzer "regexp analyzer for <symbol> tokens." "\\(\\sw\\|\\s_\\)+" nil 'symbol) (define-lex-sexp-type-analyzer srecode-template-wy--<string>-sexp-analyzer "sexp analyzer for <string> tokens." "\\s\"" 'string) (define-lex-regex-type-analyzer srecode-template-wy--<number>-regexp-analyzer "regexp analyzer for <number> tokens." semantic-lex-number-expression nil 'number) (define-lex-string-type-analyzer srecode-template-wy--<punctuation>-string-analyzer "string analyzer for <punctuation> tokens." "\\s.+" nil 'punctuation) ;;; Epilogue ;; (define-lex-simple-regex-analyzer srecode-template-property-analyzer "Detect and create a dynamic argument properties." ":\\(\\w\\|\\s_\\)*" 'property 0) (define-lex-regex-analyzer srecode-template-separator-block "Detect and create a template quote block." "^----\n" (semantic-lex-push-token (semantic-lex-token 'TEMPLATE_BLOCK (match-end 0) (semantic-lex-unterminated-syntax-protection 'TEMPLATE_BLOCK (goto-char (match-end 0)) (re-search-forward "^----$") (match-beginning 0)))) (setq semantic-lex-end-point (point))) (define-lex wisent-srecode-template-lexer "Lexical analyzer that handles SRecode Template buffers. It ignores whitespace, newlines and comments." semantic-lex-newline semantic-lex-ignore-whitespace semantic-lex-ignore-newline semantic-lex-ignore-comments srecode-template-separator-block srecode-template-wy--<keyword>-keyword-analyzer srecode-template-property-analyzer srecode-template-wy--<symbol>-regexp-analyzer srecode-template-wy--<number>-regexp-analyzer srecode-template-wy--<string>-sexp-analyzer srecode-template-wy--<punctuation>-string-analyzer semantic-lex-default-action ) (provide 'srecode/srt-wy) ;; arch-tag: 1be4c0bc-2a79-4f75-a07a-1ac518f41271 ;;; srecode/srt-wy.el ends here