poke-devel
[Top][All Lists]
Advanced

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

[PATCH] poke-mode.el: support more expressions and simple type specifier


From: Jose E. Marchesi
Subject: [PATCH] poke-mode.el: support more expressions and simple type specifiers
Date: Wed, 16 Sep 2020 17:40:13 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi Aurelien.

This expands the support for expressions in the smie grammar, and also
adds simple type specifiers.  Note how the ">-constr" and "[-constr"
tokens are not yet generated by the lexer.

WDYT?

2020-09-16  Jose E. Marchesi  <jemarch@gnu.org>

        * etc/poke-mode.el (poke-smie-grammar): Add support for more
        expressions.
        (poke--smie-forward-token): Handle some tokens with common
        prefixes.
---
 ChangeLog        |  7 ++++
 etc/poke-mode.el | 85 +++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 84790756..8aa0f45c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2020-09-16  Jose E. Marchesi  <jemarch@gnu.org>
+
+       * etc/poke-mode.el (poke-smie-grammar): Add support for more
+       expressions.
+       (poke--smie-forward-token): Handle some tokens with common
+       prefixes.
+
 2020-09-15  Aurélien Aptel  <aaptel@suse.com>
 
        * etc/poke-mode.el: Add SMIE grammar and indent code.
diff --git a/etc/poke-mode.el b/etc/poke-mode.el
index 253ee8ef..59f3d1d9 100644
--- a/etc/poke-mode.el
+++ b/etc/poke-mode.el
@@ -197,8 +197,42 @@
   (smie-prec2->grammar
    (smie-bnf->prec2
     '((id)
-      (exp ("[" exps "]"))
+      (exp ("[" exps "]")
+           (exp "+" exp)
+           (exp "-" exp)
+           (exp "*" exp)
+           (exp "/" exp)
+           (exp "/^" exp)
+           (exp "**" exp)
+           (exp "%" exp)
+           (exp "<<." exp)
+           (exp ".>>" exp)
+           (exp "==" exp)
+           (exp "!=" exp)
+           (exp "<" exp)
+           (exp ">" exp)
+           (exp "<=" exp)
+           (exp ">=" exp)
+           (exp "|" exp)
+           (exp "&" exp)
+           (exp "&&" exp)
+           (exp "||" exp)
+           (exp "in" exp)
+           (exp "as" exp)
+           (exp "isa" exp)
+           (exp ":::" exp)
+           (simple-type-specifier "@" exp)
+           (id "{" exps "}"))
       (exps (exps "," exps) (exp))
+      (simple-type-specifier
+       (id)
+       ("any")
+       ("void")
+       ("string")
+       ("int<" integer ">-constr")
+       ("uint<" integer ">-constr")
+       ("offset<" simple-type-specifier "," id ">-constr")
+       (simple-type-specifier "[-constr" exp "]"))
       (definition
         (id "=" inst)
         (id "=" id ":" inst))
@@ -212,12 +246,55 @@
        ("struct" id)
        ("union" id)
        ))
-    '((assoc ";") (assoc ",")))))
+    '((assoc ";") (assoc ",")
+      (assoc "+") (assoc "-") (assoc "*") (assoc "/")
+      (assoc "/^") (assoc "**") (assoc "%")
+      (assoc ".>>") (assoc "<<.") (assoc "==") (assoc "!=")
+      (assoc "<") (assoc ">") (assoc "<=") (assoc ">=")
+      (assoc "|") (assoc "&") (assoc "&&") (assoc "||")
+      (assoc "in") (assoc "as") (assoc "isa")
+      (assoc ":::") (assoc "@")))))
 
 (defun poke--smie-forward-token ()
   ;; FIXME:
   ;; Don't merge ":" or ";" with some preceding punctuation such as ">".
-  (smie-default-forward-token))
+  (let ((case-fold-search nil)
+        (token (smie-default-forward-token)))
+    (cond
+     ;; Detect <<.
+     ((and (equal token ":") (looking-at "<\\."))
+      (forward-char 2)
+      "<<.")
+     ;; Detect **
+     ((and (equal token "*") (looking-at "\\*"))
+      (forward-char 2)
+      "**")
+     ;; Detect ==
+     ((and (equal token "=") (looking-at "="))
+      (forward-char 2)
+      "==")
+     ;; Detect <=
+     ((and (equal token "<") (looking-at "="))
+      (forward-char 2)
+      "<=")
+     ;; Detect >=
+     ((and (equal token ">") (looking-at "="))
+      (forward-char 2)
+      ">=")
+     ;; Detect &&
+     ((and (equal token "&") (looking-at "&"))
+      (forward-char 2)
+      "&&")
+     ;; Detect ||
+     ((and (equal token "|") (looking-at "|"))
+      (forward-char 2)
+      "||")
+     ;; Detect :::
+     ((and (equal token ":") (looking-at "::"))
+      (forward-char 3)
+      ":::")
+     (t
+      token))))
 
 (defun poke--smie-backward-token ()
   (forward-comment (- (point)))
@@ -249,7 +326,7 @@
   (smie-setup poke-smie-grammar #'poke-smie-rules
               :forward-token #'poke--smie-forward-token
               :backward-token #'poke--smie-backward-token)
-  
+
   ;; font-lock
   (setq-local font-lock-defaults
               '(poke-font-lock-keywords
-- 
2.25.0.2.g232378479e




reply via email to

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