我在Emacs Lisp中编写一个解析器.它是一个解析器,用于查看如下所示的文本文件:
rule:
int: 1, 2, 3, ...
string: and, or, then, when
text:
----------
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque
in tellus. In pharetra consequat augue. In congue. Curabitur
pellentesque iaculis eros. Proin magna odio, posuere sed, commodo nec,
varius nec, tortor.
----------
more: ...
rule:
...
Run Code Online (Sandbox Code Playgroud)
我并不关心密钥(int,string,...).我想要的价值.因此对于上面的文件int具有值"1,2,3,...",字符串"和,或者,然后,当"和文本"Lorem ..."(不包括破折号).
我正在考虑两种不同的解决方案,但我没有使用哪种解决方案.我是不是该:
创建一个循环遍历所有行的简单解析器,并为每一行匹配一些正则表达式,然后将我想要的部分分组?
用词法分析器和解析器做一个更复杂的解析器?
现在文件非常简单,我想我不需要像第二个选项那样做一些事情.但是这些文件可能会有点复杂,所以我想让它更容易扩展.
你怎么解决这个问题?
我有一个小模式.如果该模式处于活动状态且用户命中DEL,我想执行一些操作,但仅限于某些条件成立.如果条件成立且执行了操作,我想在此之后不再做任何事情.但如果条件失败,我不想做任何事情,让默认的DEL动作执行.
不知道我怎么解决这个问题.但我想我可以用两种方式做到:
1) 我可以将DEL键重新绑定到次要模式中的函数,然后检查条件是否成立.但是,我怎么知道DEL的默认命令是什么?
2) 我可以像这样添加一个pre命令钩子.执行命令然后断开链.但是我该如何打破链条呢?
(add-hook 'pre-command-hook
(lambda()
(when (equal last-input-event 'backspace)
;; Do something and then stop (do not execute the
;; command that backspace is bound to)
)))
Run Code Online (Sandbox Code Playgroud)
你会以什么方式解决它?谢谢!
我想在Elisp中创建一个DSL,看起来像这样:
(install
;; do install
)
(uninstall
;; do uninstall
)
Run Code Online (Sandbox Code Playgroud)
但是,由于Elisp具有全局命名空间,因此这不是一个好主意.并且像这样的函数前缀是非常难看的.
(package-install
;; do install
)
(package-uninstall
;; do uninstall
)
Run Code Online (Sandbox Code Playgroud)
所以我认为作为妥协,所有命令都可以包含在这样的命令调用中:
(commands
(install
;; do install
)
(uninstall
;; do uninstall
)
;; ...
)
Run Code Online (Sandbox Code Playgroud)
但由于我不希望在全局命名空间中安装和卸载,我不得不在命令宏中,用例如前缀名替换所有出现的命令,如下所示:
(defmacro commands (&rest body)
(mapcar
(lambda (exp)
(setcar exp (intern (concat "package-" (symbol-name (car exp)))))
(setcdr exp (list (cons 'progn (cdr exp)))))
body)
`(progn ,@body))
(commands
(install
;; do install
)
(uninstall
;; do uninstall
)
;; ... …
Run Code Online (Sandbox Code Playgroud) 我不得不匆忙学习乳胶,现在正试图修复一份报告.大多数事情都很好,但我有一些问题.
然后我有关于乳胶的另一个问题.为什么标准如此可怕?我的意思是.如果内容太宽,您是否希望桌子不会自动断开?你有没有希望段落之间有0间距?我不明白......
谢谢!
Rails 3中Rails.configuration.gems发生了什么?我想这与Bundler有关.但是我怎样才能找到所有的宝石呢?
谢谢
我正在寻找一种模拟迷你缓冲输入的方法.因此,some-func会从迷你缓冲区获取一些输入并对其执行某些操作.问题是,我有打电话给一些-FUNC从其他一些功能调用,FUNC,我需要交互做,所以我不能只是传递一个参数.
(defun some-func (arg)
(interactive "*sEnter something: ")
;; Do something with arg
)
(defun calling-func ()
(call-interactively 'some-func)
;; Type to minibuffer
)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢!