Parsing 具有行号的Clojure语言分析
我有一种非常简单的语言。函数定义为一定数量的注释(以分号开头的行表示),后跟函数名(一个单词后跟parens),后跟任何其他内容,并以“q”结尾。下面是一个parse ez函数:Parsing 具有行号的Clojure语言分析,parsing,clojure,parse-ez,Parsing,Clojure,Parse Ez,我有一种非常简单的语言。函数定义为一定数量的注释(以分号开头的行表示),后跟函数名(一个单词后跟parens),后跟任何其他内容,并以“q”结尾。下面是一个parse ez函数: (defn routine [] (multi* (regex #";.*") (regex #"(\w+)\(.*\).*" 1) (multi* (regex #"[^q].*")) (regex #"q.*")) 这是可行的,但我想返回不同模式匹配的行号。有没有办法做到这一点,或者我需要编写自己的解析器
(defn routine []
(multi* (regex #";.*")
(regex #"(\w+)\(.*\).*" 1)
(multi* (regex #"[^q].*"))
(regex #"q.*"))
这是可行的,但我想返回不同模式匹配的行号。有没有办法做到这一点,或者我需要编写自己的解析器
就目前而言,我的语言非常简单,编写一个新的解析器并不重要,但随着复杂性的增加,它会限制我。parse ez中有一个“line pos”函数。你不能用这个吗
行pos文件:
“返回表示当前光标位置的[line column]向量
“语法分析器的定义”
您的目标是编写一种新语言还是学习如何编写解析器?如果是前者,那么您可以使用这里列出的几个库中的一个:如果您的目标是学习如何编写解析器,那么就去做。@noahz:我只想使用解析器,对编写解析器没有兴趣。您知道这里列出的解析器是否支持行号吗?在我看来,这不像任何人那样。和是两个解析库。它们都存在一个问题(,),请求为解析结果提供行和列元数据。我使用的这两个库中只有一个是parsely,它实际上保留了解析结果中的所有原始文本,因此您可以在解析树中查找
\n
并计算每个符号的行和列。