加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

解析表达式语法是否适合解析shell命令语言?

发布时间:2020-12-15 22:59:18 所属栏目:安全 来源:网络整理
导读:POSIX shell命令语言不易解析,主要是因为lexing和解析之间的紧密耦合. 但是,解析表达式语法(PEG)通常是无扫描的.通过结合lexing和解析,我似乎可以避免这些问题.我正在使用的语言(Rust)有一个维护良好的PEG库.但是,我知道有三个困难可能使得使用这个库变得不
POSIX shell命令语言不易解析,主要是因为lexing和解析之间的紧密耦合.

但是,解析表达式语法(PEG)通常是无扫描的.通过结合lexing和解析,我似乎可以避免这些问题.我正在使用的语言(Rust)有一个维护良好的PEG库.但是,我知道有三个困难可能使得使用这个库变得不切实际:

> shell必须能够逐行解析,而不是读取超过行尾的字符.
>别名纯粹是词法,并且在某些情况下可以使令牌被任何其他令牌序列替换
> Shell保留字仅在某些情况下被识别

PEG是否适合在给定这些要求的情况下解析shell命令语言,或者是一个手写的递归下降解析器更适合?

解决方法

是的,可以使用PEG,并且您注意到的任何问题都不应该成为问题.
特别是:

1)逐行解析:大多数PEG工具不会有任何内置的空白空间跳过.包括换行符在内的所有空格必须由您明确处理,这意味着您可以按照自己喜欢的方式处理换行符.

2)你不应该使用PEG的解析树作为你的AST.相反,你应该下载解析树并构建一个AST.对于别名,在解析完成并且您正在构建AST之后,您可以检测别名并为别名插入适当的扩展.

3)保留字不保留,除非您保留.也就是说,如果您的上下文中可能出现保留字或其他字母数字符号,则必须先明确检查保留字,然后检查任意字母数字符号,因为一旦PEG确定它有匹配,就不会返回-跟踪.在任何地方都不允许使用保留字,只是不检查它,并且您的通用字母数字符号规则将成功.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读