commit d3cc027d5f8b3beb6de0e9dec29facae3c3b7e09 from: Omar Polo date: Mon Nov 08 17:14:40 2021 UTC 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. commit - 0effda17cb4608aa8263c796eccc1d2505ecf448 commit + d3cc027d5f8b3beb6de0e9dec29facae3c3b7e09 blob - 31e67d71c1fa1d9664e4bee8c21f0649880af6fc blob + 212e2724c602218fc07ee2de218af959825c2705 --- a68-mode.el +++ 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)