branch: externals/a68-mode commit d3cc027d5f8b3beb6de0e9dec29facae3c3b7e09 Author: Omar Polo <o...@omarpolo.com> Commit: Omar Polo <o...@omarpolo.com>
rework the grammar In Algol68 pretty almost everything seems to yield a value (except loops, mode declarations and... ?) so it's easier (and probably more correct) to have "exprs" instead of "insts" (instructions) everywhere. The "resolvers" are probably wrong, but so far they work. --- a68-mode.el | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/a68-mode.el b/a68-mode.el index 31e67d71c1..212e2724c6 100644 --- a/a68-mode.el +++ b/a68-mode.el @@ -109,24 +109,27 @@ (defvar a68--smie-grammar (smie-prec2->grammar (smie-bnf->prec2 '((id) - (inst ("BEGIN" inst "END") - ("(" inst ")") - ("IF" insts "THEN" insts "ELSE" insts "FI") - (id "=" exp) - (id ":=" exp) - (exp)) - (insts (insts ";" insts) - (inst)) - (exp ("-" exp) - (exp "+" exp) - (exp "*" exp) - (exp "/" exp)) - (exps (exps "," exps) - (inst) - (exp))) - '((assoc ";")) - '((assoc ",")) - '((assoc "+") (assoc "-") (assoc "*") (assoc "/"))))) + (expr ("-" expr) + (expr "+" expr) + (expr "*" expr) + (expr "/" expr) + (expr "=" expr) + (expr "/=" expr) + (expr ":=" expr) + (expr ":=:" expr) + (expr ":/=:" expr) + ("BEGIN" exprs "END") + ("(" exprs ")") + ("IF" exprs "THEN" exprs "FI") + ("IF" exprs "THEN" exprs "ELSE" exprs "FI") + ("CASE" exprs "IN" exprs "ESAC") + ("CASE" exprs "IN" exprs "OUT" exprs "ESAC")) + (exprs (exprs "," exprs) + (exprs ";" exprs) + (expr))) + '((assoc ";" ",")) + '((assoc "=" "/=" ":=" ":=:" ":/=:" + "+" "-" "*" "/"))))) (defun a68--smie-rules (kind token) (pcase (cons kind token)