36.2 语法描述符

字符的 语法类别(syntax class) 描述了其在语法中的角色。 每个语法表都会为每个字符指定语法类别。 同一个字符在不同语法表中的类别没有必然关联。

每个语法类别都由一个助记字符标识, 在需要指定类别时,该字符作为类别的名称使用。 通常,这个标识字符本身常被归为对应类别; 但它作为标识的含义固定不变,与该字符当前的实际语法无关。 因此,‘\’ 作为标识字符时始终代表转义字符语法, 无论 ‘\’ 在当前语法表中是否实际拥有该语法。 语法类别与标识字符列表,See 语法类别表

语法描述符(syntax descriptor) 是一个 Lisp 字符串,用于描述字符的语法类别与其他语法属性。 若要修改字符的语法,需调用函数 modify-syntax-entry, 并将语法描述符作为参数传入(see 语法表函数)。

语法描述符的第一个字符必须是语法类别标识字符。 第二个字符(若存在)用于指定匹配字符 (例如在 Lisp 中,‘(’ 的匹配字符为 ‘)’); 空格表示无匹配字符。 后续字符用于指定额外的语法属性(see 语法标记)。

若无需匹配字符或标记,仅需一个字符(指定语法类别)即可。

例如,C 模式中字符 ‘*’ 的语法描述符为 ". 23" (即标点符号,无匹配字符,注释起始符的第二个字符,注释结束符的第一个字符), ‘/’ 的条目为 ‘. 14’ (即标点符号,无匹配字符,注释起始符的第一个字符,注释结束符的第二个字符)。

Emacs 还定义了 原始语法描述符(raw syntax descriptors),用于更低层级的语法类别描述。 See 语法表内部实现