解析表达式语法是否适合解析shell命令语言?
POSIX
shell命令语言不易解析,主要是因为lexing和解析之间的紧密耦合.
但是,解析表达式语法(PEG)通常是无扫描的.通过结合lexing和解析,我似乎可以避免这些问题.我正在使用的语言(Rust)有一个维护良好的PEG库.但是,我知道有三个困难可能使得使用这个库变得不切实际: > shell必须能够逐行解析,而不是读取超过行尾的字符. PEG是否适合在给定这些要求的情况下解析shell命令语言,或者是一个手写的递归下降解析器更适合? 解决方法
是的,可以使用PEG,并且您注意到的任何问题都不应该成为问题.
特别是: 1)逐行解析:大多数PEG工具不会有任何内置的空白空间跳过.包括换行符在内的所有空格必须由您明确处理,这意味着您可以按照自己喜欢的方式处理换行符. 2)你不应该使用PEG的解析树作为你的AST.相反,你应该下载解析树并构建一个AST.对于别名,在解析完成并且您正在构建AST之后,您可以检测别名并为别名插入适当的扩展. 3)保留字不保留,除非您保留.也就是说,如果您的上下文中可能出现保留字或其他字母数字符号,则必须先明确检查保留字,然后检查任意字母数字符号,因为一旦PEG确定它有匹配,就不会返回-跟踪.在任何地方都不允许使用保留字,只是不检查它,并且您的通用字母数字符号规则将成功. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |