github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/analysis/dfa/dfa.el (about)

     1  (require 'cl-lib)
     2  
     3  (defun format-state (prefix state ⊤ ⊥)
     4    (cond ((string= state "⊥") ⊥)
     5  		((string= state "⊤") ⊤)
     6  		(t (format "%s%s" prefix state))))
     7  
     8  (defun dh/orgtbl-to-dfa-binary-table (table params)
     9    (let* ((table (--filter (not (equal 'hline it)) table))
    10  		 (rows (1- (length table)))
    11  		 (cols (1- (length (nth 0 table))))
    12  		 (prefix (plist-get params :prefix))
    13  		 (var (plist-get params :var))
    14  		 (⊤ (plist-get params :⊤))
    15  		 (⊥ (plist-get params :⊥)))
    16  
    17  	(concat
    18  	 (if var (concat "var " var " = ") "")
    19  	 (format
    20  	  "dfa.BinaryTable(%s, map[[2]%s]%s{\n"
    21  	  ⊤ prefix prefix)
    22  	 (mapconcat
    23  	  (lambda (rowIdx)
    24  		(mapconcat
    25  		 (lambda (colIdx)
    26  		   (let* ((x (nth 0 (nth rowIdx table)))
    27  				  (y (nth colIdx (nth 0 table)))
    28  				  (z (nth colIdx (nth rowIdx table))))
    29  			 (format "{%s, %s}: %s," (format-state prefix x ⊤ ⊥) (format-state prefix y ⊤ ⊥) (format-state prefix z ⊤ ⊥))))
    30  		 (number-sequence 1 cols)
    31  		 "\n"))
    32  	  (number-sequence 1 rows)
    33  	  "\n\n")
    34  	 "\n})")))