emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/parser-generator cecf8fd 287/434: More TODO items


From: ELPA Syncer
Subject: [elpa] externals/parser-generator cecf8fd 287/434: More TODO items
Date: Mon, 29 Nov 2021 15:59:59 -0500 (EST)

branch: externals/parser-generator
commit cecf8fd3e636aabe58ad1e4b1e4ff8676fe2eeb1
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    More TODO items
---
 parser-generator-lr.el | 89 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 84 insertions(+), 5 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index e0368a7..75c86d2 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -43,8 +43,8 @@
     (error "Missing generated ACTION-tables!"))
   (unless parser-generator-lr--goto-tables
     (error "Missing generated GOTO-tables!"))
-  (unless parser-generator--table-productions-number
-    (error "Table for production-numbers is undefined!"))
+  (unless parser-generator--table-productions-number-reverse
+    (error "Table for reverse production-numbers is undefined!"))
   (unless parser-generator--table-look-aheads-p
     (error "Table for valid look-aheads is undefined!"))
   (unless parser-generator--look-ahead-number
@@ -94,9 +94,9 @@
       ;; Table production-number
       (insert
        (format
-        "(defconst\n  %s--table-productions-number\n  %s\n  \"Hash-table of 
productions indexed by production-number.\")\n\n"
+        "(defconst\n  %s--table-productions-number-reverse\n  %s\n  
\"Hash-table indexed by production-number and value is production.\")\n\n"
         namespace
-        parser-generator--table-productions-number))
+        parser-generator--table-productions-number-reverse))
 
       ;; Table look-aheads
       (insert
@@ -193,7 +193,7 @@
       (insert
        (format
         "(defun
-  %s-lex-analyzer-get-function (token)
+  %s-lex-analyzer--get-function (token)
   \"Get information about TOKEN.\"
   (unless 
     %s-lex-analyzer--get-function
@@ -327,6 +327,85 @@
 
       (insert "\n;;; Syntax-Analyzer / Parser:\n\n\n");
 
+      ;; Get grammar production by number
+      (insert
+       (format "
+(defun
+  %s--get-grammar-production-by-number
+  (production-number)
+  \"If PRODUCTION-NUMBER exist, return it's production.\"
+  (gethash
+   production-number
+   %s--table-productions-number-reverse))\n\n"
+               namespace
+               namespace))
+
+      ;; Valid symbol p
+      (insert
+       (format "
+(defun 
+  %s--valid-symbol-p 
+  (symbol)
+  \"Return whether SYMBOL is valid or not.\"
+  (let ((is-valid t))
+    (unless (or
+             (%s--valid-e-p symbol)
+             (%s--valid-eof-p symbol)
+             (%s--valid-non-terminal-p symbol)
+             (%s--valid-terminal-p symbol))
+      (setq is-valid nil))
+    is-valid))\n\n"
+               namespace
+               namespace
+               namespace
+               namespace
+               namespace))
+
+      ;; Valid e-p
+      (insert
+       (format "
+(defun 
+  %s--valid-e-p
+  (symbol)
+  \"Return whether SYMBOL is the e identifier or not.\"
+  (eq
+   symbol
+   %s--e-identifier))\n\n"
+               namespace
+               namespace))
+
+      ;; Valid EOF-p
+      (insert
+       (format "
+(defun 
+  %s--valid-eof-p
+  (symbol)
+  \"Return whether SYMBOL is the EOF identifier or not.\"
+  (eq 
+    symbol 
+    %s--eof-identifier))\n\n"
+               namespace
+               namespace))
+
+      ;; TODO --valid-non-terminal-p
+      ;; TODO --valid-terminal-p
+
+      ;; Get grammar translation by number
+      (insert
+       (format "
+(defun 
+  %s--get-grammar-translation-by-number
+  (production-number)
+  \"If translation for PRODUCTION-NUMBER exist, return it.\"
+  (gethash 
+    production-number 
+    %s--table-translations))\n\n"
+               namespace
+               namespace))
+
+      ;; TODO Add simple parse and translate function
+
+      ;; Parse / translate function
       (insert
        (format "
 (defun 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]