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

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

[elpa] externals/parser-generator 89105668e8 01/82: Started on LL(k) imp


From: Christian Johansson
Subject: [elpa] externals/parser-generator 89105668e8 01/82: Started on LL(k) implementation
Date: Thu, 12 May 2022 13:28:12 -0400 (EDT)

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

    Started on LL(k) implementation
---
 Makefile                         |  6 +++-
 parser-generator-ll.el           | 67 ++++++++++++++++++++++++++++++++++++++++
 parser-generator-lr.el           |  4 +--
 test/parser-generator-ll-test.el | 53 +++++++++++++++++++++++++++++++
 4 files changed, 127 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 4965a61a20..0a0c777f40 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ ifdef emacs
 endif
 EMACS_CMD := $(EMACS) -Q -batch -L . -L test/
 
-EL  := parser-generator.el parser-generator-lex-analyzer.el 
parser-generator-lr.el parser-generator-lr-export.el 
test/parser-generator-test.el test/parser-generator-lex-analyzer-test.el 
test/parser-generator-lr-export-test.el test/parser-generator-lr-test.el 
+EL  := parser-generator.el parser-generator-lex-analyzer.el 
parser-generator-ll.el parser-generator-lr.el parser-generator-lr-export.el 
test/parser-generator-test.el test/parser-generator-lex-analyzer-test.el 
test/parser-generator-lr-export-test.el test/parser-generator-ll-test.el 
test/parser-generator-lr-test.el 
 ELC := $(EL:.el=.elc)
 
 .PHONY: clean
@@ -27,6 +27,10 @@ test-lex-analyzer:
 test-lr:
        $(EMACS_CMD) -l test/parser-generator-lr-test.el -f 
"parser-generator-lr-test"
 
+.PHONY: test-ll
+test-ll:
+       $(EMACS_CMD) -l test/parser-generator-ll-test.el -f 
"parser-generator-ll-test"
+
 .PHONY: test-lr-export
 test-lr-export:
        $(EMACS_CMD) -l test/parser-generator-lr-export-test.el -f 
"parser-generator-lr-export-test"
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
new file mode 100644
index 0000000000..c488f3af48
--- /dev/null
+++ b/parser-generator-ll.el
@@ -0,0 +1,67 @@
+;;; parser-generator-ll.el --- LL(k) Parser Generator -*- lexical-binding: t 
-*-
+
+;; Copyright (C) 2020-2022  Free Software Foundation, Inc.
+
+
+;;; Commentary:
+
+
+;;; Code:
+
+
+(require 'parser-generator)
+(require 'parser-generator-lex-analyzer)
+
+
+;;; Variables:
+
+
+(defvar
+  parser-generator-ll--parsing-table
+  nil
+  "Parsing-table for grammar.")
+
+
+;;; Functions
+
+
+(defun parser-generator-ll-generate-parser-tables ()
+  "Generate parsing tables for grammar."
+  (message "\n;; Starting generation of LL(k) parser-tables..\n")
+  (unless (parser-generator-ll--valid-llk-p parser-generator--grammar)
+    (error "Invalid grammar specified!"))
+  (let* ((tables (parser-generator-ll--generate-tables))
+         (parsing-table (parser-generator-ll--generate-parsing-table)))
+    (setq
+     parser-generator-ll--parsing-table
+     parsing-table)
+    (message "\n;; Completed generation of LL(k) parser-tables.\n")))
+
+
+;;; Algorithms
+
+
+;; TODO
+;; Algorithm 5.2 p. 350
+(defun parser-generator-ll--generate-tables ()
+  "Construction of LL(k)-tables.  Output the set of LL(k) tables needed to 
construct a parsing table for the grammar G."
+  )
+
+
+;; TODO
+;; Algorithm 5.3 p. 351
+(defun parser-generator-ll--generate-parsing-table ()
+  "A parsing table for an LL(k) grammar G.  Output M, a valid parsing table 
for G."
+  )
+
+
+;; TODO
+;; Algorithm 5.4 p. 357
+(defun parser-generator-ll--valid-grammar-p ()
+  "Test for LL(k)-ness.  Output t if grammar G is LL(k).  nil otherwise."
+  )
+
+
+(provide 'parser-generator-ll)
+
+;;; parser-generator-ll.el ends here
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index d57f691906..47c0baa3b3 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -254,13 +254,13 @@
 
 (defun parser-generator-lr-generate-parser-tables ()
   "Generate parsing tables for grammar."
-  (message "\n;; Starting generation of parser-tables..\n")
+  (message "\n;; Starting generation of LR(k) parser-tables..\n")
   (parser-generator-lr--generate-precedence-tables)
   (let ((table-lr-items
          (parser-generator-lr--generate-goto-tables)))
     (parser-generator-lr--generate-action-tables
      table-lr-items)
-    (message "\n;; Completed generation of parser-tables.\n")
+    (message "\n;; Completed generation of LR(k) parser-tables.\n")
     table-lr-items))
 
 (defun parser-generator-lr--get-expanded-action-tables ()
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
new file mode 100644
index 0000000000..9c13d1fc95
--- /dev/null
+++ b/test/parser-generator-ll-test.el
@@ -0,0 +1,53 @@
+;; parser-generator-ll-test.el --- Tests for LL(k) Parser Generator -*- 
lexical-binding: t -*-
+
+;; Copyright (C) 2020-2022  Free Software Foundation, Inc.
+
+
+;;; Commentary:
+
+
+;;; Code:
+
+
+(require 'parser-generator-ll)
+(require 'ert)
+
+(defun parser-generator-ll-test--generate-tables ()
+  "Test `parser-generator-ll--generate-tables'."
+  (message "Started tests for (parser-generator-ll--generate-tables)")
+
+
+  (message "Passed tests for (parser-generator-ll--generate-tables)"))
+
+(defun parser-generator-ll-test--generate-parsing-table ()
+  "Test `parser-generator-ll--generate-parsing-table'."
+  (message "Started tests for (parser-generator-ll--generate-parsing-table)")
+
+
+  (message "Passed tests for (parser-generator-ll--generate-parsing-table)"))
+
+(defun parser-generator-ll-test--valid-grammar-p ()
+  "Test `parser-generator-ll--valid-grammar-p'."
+  (message "Started tests for (parser-generator-ll--valid-grammar-p)")
+
+
+  (message "Passed tests for (parser-generator-ll--valid-grammar-p)"))
+
+(defun parser-generator-ll-test-generate-parser-tables ()
+  "Test `parser-generator-ll-generate-parser-tables'."
+  (message "Started tests for (parser-generator-ll-generate-parser-tables)")
+
+
+  (message "Passed tests for (parser-generator-ll-generate-parser-tables)"))
+
+(defun parser-generator-ll-test ()
+  "Run test."
+  (parser-generator-ll-test--generate-tables)
+  (parser-generator-ll-test--generate-parsing-table)
+  (parser-generator-ll-test--valid-grammar-p)
+  (parser-generator-ll-test-generate-parser-tables))
+
+
+(provide 'parser-generator-ll-test)
+
+;;; parser-generator-ll-test.el ends here



reply via email to

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