commit 1e3d47620a6c03ad0a992aae4ae2be06b44306c3 from: Omar Polo date: Thu Nov 18 13:03:17 2021 UTC rework the grammar commit - 92d1f34ce412ff453b3533f9d12786d24e16a9c5 commit + 1e3d47620a6c03ad0a992aae4ae2be06b44306c3 blob - 4bb45f624228ab0200aab45ca8574e1d46c9c2ed blob + e829b1bc12b5612d28b4486647e20125adee6001 --- a68-mode.el +++ a68-mode.el @@ -109,46 +109,60 @@ (defvar a68--smie-grammar (smie-prec2->grammar (smie-bnf->prec2 '((id) - (expr ("-" expr) - (expr "+" expr) - (expr "*" expr) - (expr "/" expr) - (expr "=" expr) - (expr "/=" expr) - (expr ":=" expr) - (expr ":=:" expr) - (expr ":/=:" expr) - ("BEGIN" exprs "END") - ("(" exprs ")") - ;; why all the repetitions? copied from - ;; sh-script.el - ("IF" exprs "THEN" exprs "FI") - ("IF" exprs "THEN" exprs "ELSE" exprs "FI") - ("IF" exprs "THEN" exprs - "ELIF" exprs "THEN" exprs "FI") - ("IF" exprs "THEN" exprs - "ELIF" exprs "THEN" exprs - "ELSE" exprs "FI") - ("IF" exprs "THEN" exprs - "ELIF" exprs "THEN" exprs - "ELIF" exprs "THEN" exprs - "ELSE" exprs "FI") - ("CASE" exprs "IN" exprs "ESAC") - ("CASE" exprs "IN" exprs "OUT" exprs "ESAC")) - (exprs (exprs "," exprs) - (exprs ";" exprs) - (exprs ":" exprs) - (expr)) - (loop ("FOR" exprs "FROM" exprs "TO" exprs - "BY" exprs "DO" exprs "OD") - ("FOR" exprs "FROM" exprs "TO" exprs - "DO" exprs "OD") - ("FOR" exprs "BY" exprs "TO" exprs - "DO" exprs "OD") - ;; ("TO" exprs "DO" exprs "OD") - ("WHILE" exprs "DO" exprs "OD"))) - '((assoc ";" "," ":")) - '((assoc "=" "/=" ":=" ":=:" ":/=:" + (ids (id "-anchor-" id)) + (fields (fields "," fields) + (ids)) + (args ("(" fargs ")")) + (fargs (fargs "," fargs) + (exp)) + (exp (ids) + (exp "OF" exp) + (exp "[" exp "]") + ("(" exp ")") + ("BEGIN" exp "END")) + (type-decl ("MODE" type-decl*)) + (type-decl* (type-decl* "," type-decl*) + (id "=" type-decl**)) + (type-decl** ("STRUCT" args) + ("UNION" args) + ("PROC" args "-archor-" ids)) + (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)) + ;; TODO: this don't cover all the loop + ;; possibilities. + (loop ("FOR" exp "FROM" exp "TO" exp "BY" exp + "DO" exp "OD") + ("FOR" exp "FROM" exp "TO" exp + "DO" exp "OD") + ("FOR" exp "BY" exp "TO" exp + "DO" exp "OD") + ("-to-" "TO" exp "DO" exp "OD") + ("WHILE" exp "DO" exp "OD")) + (insts (insts ";" insts) + (id ":=" exp) + ("IF" exp "THEN" insts "FI") + ("IF" exp "THEN" insts "ELSE" insts "FI") + ("IF" exp "THEN" insts + "ELSIF" exp "THEN" insts "ELSE" insts "FI") + ("IF" exp "THEN" insts + "ELSIF" exp "THEN" insts + "ELSIF" exp "THEN" insts "ELSE" insts "FI") + ;; TODO OUSE for both case and conformity case + ("CASE" exp "IN" fargs "ESAC") + ("CASE" exp "IN" conformity-cases "ESAC") + ("CASE" exp "IN" fargs "OUT" exp "ESAC") + (op-decl) + (type-decl) + (proc-decl) + (loop))) + '((assoc "OF" "[") + (assoc ";") + (assoc "|" "|:") + (assoc ",")) + '((assoc "=" "/" ":=" ":=:" ":/=:" "+" "-" "*" "/"))))) (defun a68--smie-rules (kind token)