For a smie grammar like this: (id) (inst ("if" exp "{" insts "}") (exp)) (insts (insts ";" insts) (inst)) (exp (exp "." id) (id ":" exp) (exp "=" exp)) (exps (exps "," exps) (exp)) Using 2 possible ways of hanling braces tokens: 1. Using default lexer rules for braces (as per documentation). 2. Manually tokenizing braces in lexer (uncomment lines 196-197 and 213-214 in provided source file) I'm getting different indentation results. For the case number 1, indentation of the consutriction: if true { |foo } is invalid and from the logs it seems like smie doesn't parse this constructor correctly. For the case number 2 indentation works as expected, but for the construction like this (which is a simple sexp): { }| I'm getting "Mismatching parenthesis" error when I'm calling blink-matching-open.