gpt4 book ai didi

elisp - 使用 Emac 的 SMIE 来解析带有可选的语​​言;用于语句终止

转载 作者:行者123 更新时间:2023-12-01 23:13:10 26 4
gpt4 key购买 nike

我正在使用 SMIE 来解析一种并不总是需要 ; 来终止语句的语言。 如果行尾在大括号构造 ({},(),[]) 和最后一个非注释标记之外不是运算符,则 \n 充当语句终止符。否则,如果行尾在大括号构造内或最后一个标记是运算符,则 \n 充当延续。

例如,

variable := 172 + 92; 

variable := 172 + 92

variable :=
172 + 92;

variable :=
172 + 92

variable := (172 +
92)

都是有效的陈述。但是,

variable 
:= 172 + 92

不是。

我如何编码这是 SMIE 的 BNF 语法(或任何初学者的 BNF)?或者,这不可能吗?

我知道如何将它放入词法分析器并适本地添加 ; 标记,但如果可能的话我宁愿将它放入语法中。

最佳答案

不,您不能在 BNF 中对其进行编码(因为 SMIE 只接受无法表达的非常弱的 BNF)。看看我在 Octave 模式下是如何做到的:分词器在遇到 \n 时返回 ";" ,该 \n 位于大括号/方括号/paren (您可以使用 (zerop (car (syntax-ppss))) 进行检查。

关于elisp - 使用 Emac 的 SMIE 来解析带有可选的语​​言;用于语句终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com