[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator d173c1e 281/434: More work on exportin
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator d173c1e 281/434: More work on exporting parser as code function |
Date: |
Mon, 29 Nov 2021 15:59:58 -0500 (EST) |
branch: externals/parser-generator
commit d173c1e1e3c67c83e4b3211965acb17e61978b47
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on exporting parser as code function
---
parser-generator-lr.el | 219 +++++++++++++++++++++++++++++++++++++++----------
1 file changed, 176 insertions(+), 43 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 824a103..635ee4a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -64,49 +64,182 @@
(unless parser-generator-lex-analyzer--function
(error "Missing lex-analyzer function!"))
- ;; TODO Extract some stuff as global
- ;; 1. parse-function
- ;; 2. parse variables
- ;; 2. lex-functions
- ;; 3. lex index
-
- ;; TODO Export parser here
- `(lambda
- (&optional
- input-tape-index
- pushdown-list
- output
- translation
- translation-symbol-table
- history)
- (let
- ((action-tables
- ,parser-generator-lr--action-tables)
- (goto-tables
- ,parser-generator-lr--goto-tables)
- (table-productions-number
- ,parser-generator--table-productions-number)
- (table-look-aheads-p
- ,parser-generator--table-look-aheads-p)
- (look-ahead-number
- ,parser-generator--look-ahead-number)
- (e-identifier
- ,parser-generator--e-identifier)
- (eof-identifier
- ,parser-generator--eof-identifier)
- (table-non-terminal-p
- ,parser-generator--table-non-terminal-p)
- (table-terminal-p
- ,parser-generator--table-terminal-p)
- (table-translations
- ,parser-generator--table-translations)
- (lex-analyzer-get-function
- ,parser-generator-lex-analyzer--get-function)
- (lex-analyzer-function
- ,parser-generator-lex-analyzer--function)
- (lex-analyzer-reset-function
- ,parser-generator-lex-analyzer--reset-function))
- )))
+ (let ((code))
+ (with-temp-buffer
+ (goto-char (point-min))
+
+ ;; Header
+ (insert
+ (format
+ ";;; %s.el --- Exported Emacs Parser Generator -*- lexical-binding: t
-*-\n\n\n"
+ namespace))
+ (insert ";;; Commentary:\n\n\n;;; Code:\n\n\n")
+
+ (insert ";;; Constants:\n\n\n")
+
+ ;; Action-tables
+ (insert
+ (format
+ "(defconst\n%s-action-tables"
+ namespace))
+ (print
+ parser-generator-lr--action-tables
+ (current-buffer))
+ (insert "\"Generated action-tables.\")\n\n")
+
+ ;; Goto-tables
+ (insert
+ (format
+ "(defconst\n%s-goto-tables"
+ namespace))
+ (print
+ parser-generator-lr--goto-tables
+ (current-buffer))
+ (insert "\"Generated goto-tables.\")\n\n")
+
+ ;; Table production-number
+ (insert
+ (format
+ "(defconst\n%s-table-productions-number"
+ namespace))
+ (print
+ parser-generator--table-productions-number
+ (current-buffer))
+ (insert "\"Hash-table of productions indexed by
production-number.\")\n\n")
+
+ ;; Table look-aheads
+ (insert
+ (format
+ "(defconst\n%s-table-look-aheads"
+ namespace))
+ (print
+ parser-generator--table-look-aheads-p
+ (current-buffer))
+ (insert "\"Hash-table of valid look-aheads.\")\n\n")
+
+ ;; Table terminals
+ (insert
+ (format
+ "(defconst\n%s-table-terminal-p"
+ namespace))
+ (print
+ parser-generator--table-non-terminal-p
+ (current-buffer))
+ (insert "\"Hash-table of valid terminals.\")\n\n")
+
+ ;; Table non-terminals
+ (insert
+ (format
+ "(defconst\n%s-table-non-terminal-p"
+ namespace))
+ (print
+ parser-generator--table-non-terminal-p
+ (current-buffer))
+ (insert "\"Hash-table of valid non-terminals.\")\n\n")
+
+ ;; Table translations
+ (insert
+ (format
+ "(defconst\n%s-table-translations"
+ namespace))
+ (print
+ parser-generator--table-translations
+ (current-buffer))
+ (insert "\"Hash-table of translations.\")\n\n")
+
+ ;; E-identifier
+ (insert
+ (format
+ "(defconst\n%s-e-identifier\n'%s\n\"e-identifier\")\n\n"
+ namespace
+ parser-generator--e-identifier))
+
+ ;; EOF-identifier
+ (insert
+ (format
+ "(defconst\n%s-eof-identifier\n'%s\n\"EOF-identifier.\")\n\n"
+ namespace
+ parser-generator--eof-identifier))
+
+ ;; Look-ahead number
+ (insert
+ (format
+ "(defconst\n%s-look-ahead-number"
+ namespace))
+ (print
+ parser-generator--look-ahead-number
+ (current-buffer))
+ (insert "\"Look-ahead number.\")\n\n")
+
+ (insert "\n;;; Variables:\n\n\n")
+
+ ;; Lex-analyzer index
+ (insert
+ (format
+ "(defvar\n%s-lex-analyzer-index\n0\n\"Current index of
lex-analyzer.\")\n\n"
+ namespace))
+
+ (insert "\n;;; Functions:\n\n\n")
+
+ (insert ";;; Lex-Analyzer:\n\n\n")
+
+ ;; Lex-Analyzer Get Function
+ (insert
+ (format
+ "(defun\n%s-lex-analyzer-get\n(token)\n\"Get token information.\""
+ namespace))
+ (print
+ parser-generator-lex-analyzer--get-function
+ (current-buffer))
+ (insert ")\n\n")
+
+ ;; Lex-Analyzer Function
+ (insert
+ (format
+ "(defun\n%s-lex-analyzer\n()\n\"Get next token.\""
+ namespace))
+ (print
+ parser-generator-lex-analyzer--function
+ (current-buffer))
+ (insert ")\n\n")
+
+ ;; Lex-Analyzer Reset Function
+ (insert
+ (format
+ "(defun\n%s-lex-analyzer\n()\n\"Reset
lex-analyzer.\"\n(setq\n%s-lex-analyzer--index\n1\n)"
+ namespace
+ namespace))
+ (when
+ parser-generator-lex-analyzer--reset-function
+ (insert "(funcall")
+ (print
+ parser-generator-lex-analyzer--reset-function
+ (current-buffer))
+ (insert ")\n"))
+ (insert ")\n\n")
+
+
+ (insert "\n;;; Syntax-Analyzer / Parser:\n\n\n");
+
+ ;; TODO Functions
+
+
+ ;; Footer
+ (insert
+ (format
+ "\n(provide '%s)"
+ namespace))
+ (insert
+ (format
+ "\n\n;;; %s.el ends here"
+ namespace))
+
+ (setq
+ code
+ (buffer-substring-no-properties
+ (point-min)
+ (point-max))))
+ code))
;; Algorithm 5.11, p. 393
(defun parser-generator-lr--generate-action-tables (table-lr-items)
- [elpa] externals/parser-generator fe05328 250/434: Passed unit tests for LRk parser k=2, (continued)
- [elpa] externals/parser-generator fe05328 250/434: Passed unit tests for LRk parser k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d1f4682 248/434: Added a function that converts a FIRST-item to a look-ahead item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6845262 243/434: Passed GOTO-tables k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3a0d4cd 255/434: Added translation test for LRk=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 03ca2e9 247/434: Look-ahead generation now supports EOF symbol, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3563720 266/434: Updated docs about lexical analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 412fd2a 273/434: Passing generation of GOTO-table for LR(0) grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bc23604 274/434: Fixed look-ahead, first and e-free-first with k = 0, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1879cb0 271/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 16bb2d8 262/434: Added translation example LRk parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d173c1e 281/434: More work on exporting parser as code function,
ELPA Syncer <=
- [elpa] externals/parser-generator bd887ff 277/434: LR(0) Parser passing translation test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 852f969 283/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0d6d46d 294/434: Debugging incremental issue with exported translator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c4c68b2 302/434: Added progress-indicator to goto-table generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 586789d 308/434: Added cache to first calculation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 236a124 322/434: More work on resolving conflicts, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 04c360b 318/434: LR-items set validation now supports symbols with attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ea02245 325/434: Improved debug output, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e56bcff 324/434: Improved output of productions and action-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fb29641 337/434: Passing old context-sensitive precedence example with new structure, ELPA Syncer, 2021/11/29