我写了一个解析日志的小程序。但是,当我尝试评估它时,我收到以下错误:
档案“”,第8行,第38栏
(setv rule (.next irule))))))) ^ LexException: Ran into a RPAREN where it wasn't expected.
有问题的功能(单独评估时也会出错):
(defmain [&rest args]
(setv inname (get args 1))
(setv outname (get args 2))
(with [ifile (open inname 'r')]
(with [ofile (open outname 'w')]
(setv tl (Tableline))
(setv irule (iter (.get-rule tl)))
(setv rule (.next irule))
(for [line ifile]
(setv match (re.match (get rule 0) line))
(when match
(for [(, group-num attr-data) (enumerate (get rule 1))]
(setattr tl (get attr-data 1) (apply (get attr-data 0)
[(.group match (inc group-num))])))
(if (. tl ready) (write ofile (str tl)))
(setv rule (.next irule)))))))
据我所知,它是平衡的表达,所有的parens都在他们的位置。为什么词法分析器会失败?
我的计划全文如下:pastebin
答案 0 :(得分:1)
你需要使用双引号来制作字符串。
在lisps中,单引号用于与制作字符串完全不同的东西 - “引用”下一个表单。解析lisp代码时,'a
等表达式将转换为(quote a)
。同样,'(hello)
变为(quote (hello))
。请注意,只有一个'标记,因为它总是包装下一个表达式。报价表单允许您“关闭”单个表达式的评估。查找lisp引用 - 它非常有用,对于该语言的一些更强大的功能非常重要。
答案 1 :(得分:0)
应该使用“w”和“r”而不是“w”和“r”