我正在为PHP,JavaScript和CSS编写一些自下而上的解析器。最好,我想编写一个能够解析所有语言的解析器。我听说过可以使用LALR(1)解析器解析JavaScript(但是,如果我错了,请纠正我)。 LALR(1)解析器是否足以支持PHP和CSS,或者我需要编写不同的东西吗?
答案 0 :(得分:2)
我怀疑你可以实现一个解析器来解析所有这三种语言。我想你需要3个解析器。如果这就是你的意思,他们可能会共享解析引擎。
你可以通过接受“太多”(因为解析机制不够强大而不能区分)并添加捕获结构的后解析处理(通常是AST)来检查任何语言,几乎任何解析技术都可以解析任何语言/处理/消除多余的接受。
争论的焦点是你必须收集多少钱,以及消除所接受的过量是多么痛苦。
所以,LALR(1)会这样做。也存在证据; PHP解释器是使用Bison(LALR(1))实现的;你可以通过下载PHP tarball并在其中挖掘来为自己发现这一点。
我认为CSS不是一个很难的语法。不过,我认为它有很多。
JavaScript会给你一个错误的分号问题,因为它被定义为“如果解析器没有它就会给你一个错误,并且它不存在,假装它存在”。所以实质上你必须滥用解析器中的错误处理机制来恢复。
你正在看很多工作。获取现有解析器不是更容易吗?或者你想要一套统一的机器吗?