branch: externals/a68-mode
commit 5458a4ff9aa0a06977bf6bd5228240315bf2b299
Author: Jose E. Marchesi <jose.march...@oracle.com>
Commit: Jose E. Marchesi <jose.march...@oracle.com>

    More work in the grammar
---
 a68-mode.el | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 118 insertions(+), 19 deletions(-)

diff --git a/a68-mode.el b/a68-mode.el
index 3607479552..f658ad8ec1 100644
--- a/a68-mode.el
+++ b/a68-mode.el
@@ -354,7 +354,7 @@ with the equivalent upcased form."
 
 (defconst a68--bnf-grammar
   '((id)
-    (declarer)
+    (field-selector)
     (ids (id "-anchor-" id))
     (fields (fields "," fields)
             (ids))
@@ -364,7 +364,7 @@ with the equivalent upcased form."
     (fargs (fargs "," fargs)
            (modal)
            (exp))
-    (modal ("-mode-" type-decl**))
+    (modal ("-mode-" mode-indication))
     (specs (specs "," specs)
            (spec))
     (exp (ids)
@@ -372,15 +372,6 @@ with the equivalent upcased form."
          (exp "[" exp "]")
          ("module" exp "def"  exp "fed")
          ("module" exp "def" exp "postlude" exp "fed"))
-    ;; Declarations:
-    (type-decl** ("struct" args)
-                 ("union" args)
-                 ("proc" args))
-    (op-decl (op-decl "," op-decl)
-             ("op" ids "=" args ids ":" exp))
-    (proc-decl (proc-decl "," proc-decl)
-               ("op" ids "=" args ids ":" exp)
-               ("proc" ids "=" ids ":" exp))
     ;; Compilation inputs
     ;; ==================
     (compilation-input (labeled-enclosed-clause)
@@ -553,18 +544,14 @@ with the equivalent upcased form."
     ;;   mode joined definition :
     ;;     (mode joined definition, and also token), mode definition.
     ;;   mode definition :
-    ;;     defined mode indication, is defined as token, declarer or code.
+    ;;     defined mode indication, is defined as token, declarer.
     ;;   defined mode indication :
     ;;     mode indication.
-    ;;   declarer or code :
-    ;;     declarer ; code.
     (mode-declaration ("mode" mode-joined-definition))
     (mode-joined-definition (mode-joined-definition "," mode-joined-definition)
                             (mode-definition))
-    (mode-definition (mode-indication "=" declarer-or-code))
+    (mode-definition (mode-indication "-bold=-" declarer))
     (mode-indication ("-bold-"))
-    (declarer-or-code (declarer)
-                      (code))
     ;; Priority declarations
     ;; ---------------------
     ;;   priority declaration :
@@ -578,10 +565,84 @@ with the equivalent upcased form."
     (priority-declaration ("prio" priority-joined-definition))
     (priority-joined-definition (priority-joined-definition "," 
priority-joined-definition)
                                 (priority-definition))
-    (priority-definition (operator "=" priority-unit))
+    (priority-definition (operator "-op=-" priority-unit))
     (operator ("-oper-"))
     (priority-unit ("1") ("2") ("3") ("4") ("5")
                    ("6") ("7") ("8") ("9"))
+    ;; Operation declarations
+    ;; ----------------------
+    ;;   operation declaration :
+    ;;     operation token, operation joined definition.
+    ;;   operation joined definition :
+    ;;     (operation joined definition, and also token),
+    ;;     operation definition.
+    ;;   operation definition :
+    ;;     operator, is defined as token, routine text.
+    ;;   operator :
+    ;;     defining operator.
+    (operation-declaration ("op" operation-joined-definition))
+    (operation-joined-definition (operation-joined-definition "," 
operation-joined-definition)
+                                 (operation-definition))
+    (operation-definition (operator "-op=-" routine-text)
+                          (operator "-op=-" operator-indication)
+                          (operator-indication "-op=-" routine-text)
+                          (operator-indication "-op=-" operator-indication))
+    (operator-indication ("-bold-"))
+    ;; Declarers
+    ;; ---------
+    ;;    declarer :
+    ;;      nonproc declarer; procedure declarator.
+    ;;    nonproc declarer :
+    ;;      reference to declarator ; structured with declarator ;
+    ;;      flexible rows of declarator ; rows of declarator ;
+    ;;      union of declarator ; mode indication.
+    ;;    reference to declarator :
+    ;;      reference to token, declarer.
+    ;;    structured with declarator :
+    ;;      structure token, portrayer pack.
+    ;;    portrayer pack :
+    ;;      brief begin token, portrayer, brief end token.
+    ;;    portrayer :
+    ;;      common portrayer, (separate and also token, portrayer).
+    ;;    common portrayer :
+    ;;      declarer, dectag insert, joined definition of field.
+    ;;    joined definition of field :
+    ;;      (joined definition of fields, and also token), field selector.
+    ;;    flexible rows of declarator :
+    ;;      flexible token, declarer.
+    ;;    rows of declarator :
+    ;;      rower bracket, row insert, declarer.
+    ;;    rower bracket :
+    ;;      brief sub token, rower, brief bus token;
+    ;;      style i sub token, rower, style i bus token.
+    ;;    rower :
+    ;;      (rower, and also token), row rower.
+    ;;    rower part :
+    ;;      (unit), up to token.
+    ;;    procedure declarator :
+    ;;      procedure token, formal procedure plan.
+    ;;    formal procedure plan :
+    ;;      (joined declarer pack, formals insert), declarer.
+    ;;    joined declarer pack :
+    ;;      brief begin token, joined declarer, brief end token.
+    ;;    joined declarer :
+    ;;      (joined declarer, and also token), declarer.
+    ;;    union of declarator :
+    ;;      union of token, joined declarer pack.
+    (declarer (nonproc-declarer)
+              (procedure-declarator))
+    (nonproc-declarer ("ref" declarer)
+                      ("struct" portrayer-pack)
+                      ;;(structured-with-declarator)
+                      ;;(flexible-rows-of-declarator)
+                      ;;(rows-of-declarator)
+                      ;;(union-of-declarator)
+                      (mode-indication)
+                      ("-stdmode-"))
+    (portrayer-pack ("(" portrayer ")"))
+    (portrayer (portrayer "," portrayer)
+               (declarer "-dectag-")
+               (id))
     ;; Units
     ;; =====
     ;;  unit :
@@ -708,7 +769,15 @@ with the equivalent upcased form."
     ;; Casts
     ;; -----
     (cast (declarer "-cast-" enclosed-clause)))
-  "Algol 68 BNF operator precedence grammar to use with SMIE")
+  "Algol 68 BNF operator precedence grammar to use with SMIE.
+
+This grammar has been adapted from the Algol 68+ operator precedence
+grammar described by L.G.L.T Meertens and J.C. van Vliet in their
+article \"An operator-priority grammar for Algol 68+\".  The grammar is
+simplified to adapt it to the purpose of indentation, to work well with
+SMIE, and to denote Algol 68 as oppossed to Algol 68+, which is a
+superlanguage of Algol 68 that is capable of expressing the code for the
+standard prelude described in the Revised Report.")
 
 (defvar a68--smie-grammar-upper
   (smie-prec2->grammar
@@ -828,10 +897,25 @@ with the equivalent upcased form."
   (forward-comment (point-max))
   (let ((case-fold-search nil))
     (cond
+     ;; Standard mode indicators.
+     ((looking-at (concat "\\<" (regexp-opt a68-std-modes-supper) "\\>"))
+      (goto-char (match-end 0))
+      "-stdmode-")
      ;; operator.
      ((posix-looking-at a68--oper-regexp)
       (goto-char (match-end 0))
       "-oper-")
+     ;; = can be an equal operator or an is-defined-token.
+     ((looking-at "=")
+      (let ((token (cond
+                    ((looking-back "\\<[A-Z][A-Za-z_]+\\>[ \n\t]*")
+                     "-bold=-")
+                    ((looking-back (concat a68--oper-regexp "[ \n\t]*"))
+                     "-op=-")
+                    (t
+                      "="))))
+        (goto-char (+ (point) 1))
+        token))
      ;; A bold-word may be a ssecca insert if it is preceded by a
      ;; joined list of bold words, preceded by access.
      ((looking-at "[A-Z][A-Za-z_]+")
@@ -953,11 +1037,26 @@ with the equivalent upcased form."
   (forward-comment (- (point)))
   (let ((case-fold-search nil))
     (cond
+     ;; Standard mode indicators.
+     ((looking-back (concat "\\<" (regexp-opt a68-std-modes-supper) "\\>")
+                    (pos-bol))
+      (goto-char (match-beginning 0))
+      "-stdmode-")
      ;; operator, so any nomad or monad.
      ((looking-back a68--oper-regexp
                     (pos-bol))
       (goto-char (match-beginning 0))
       "-oper-")
+     ((looking-back "=")
+      (let ((token (cond
+                    ((looking-back "\\<[A-Z][A-Za-z_]+\\>[ \n\t]*=")
+                     "-bold=-")
+                    ((looking-back (concat a68--oper-regexp "[ \n\t]*="))
+                     "-op=-")
+                    (t
+                     "="))))
+        (goto-char (- (point) 1))
+        token))
      ((looking-back "[A-Z][A-Za-z_]+" (pos-bol))
       (goto-char (match-beginning 0))
       (if (and (not (looking-at "[A-Z][A-Za-z_]+[ \t\n]*,"))

Reply via email to