2011-06-09 49 views
1

我正在执行两种语言L1和L2的解析和表达式评估。 重要的是,L1可以作为单独的语言使用,也可以作为L2的一部分使用,L2仅包含几个关键字,这些关键字在L1中不存在。是否可以使用为某种语言开发的FsYacc解析器作为其他语言解析过程的一部分?

我已经乐星做 - >解析 - > AST生产 - > AST处理过程L1和用于此F#与FsLexFsYacc工具。

是否可以使用已经开发的解析过程(我的意思是令牌,在L1解析器定义AST生产)解析另一种语言L2中?

AST:L1的AST将被用作L2的一部分,并且它将被用于相同的AST处理过程。

FsLex Lexer:对于这两种语言而言,可能都是通用的,我只需要在L1词法分析器中包含若干缺少关键字即可。但是,如果可以为L1和L2分别使用词法分析器,并且参考L2词法分析器中的L1,那么会很好。

FsYacc解析器:我不喜欢'copy-C'所有的L1解析器代码到L2中。 在L1语法分析器中定义的L2,令牌和AST数据生成中是否有引用的方法?

预先感谢

回答

2

这里有一个有趣article其中提到语法组合物的困难。小故事是,你不能做你想做的事情,使用类似yacc的解析器生成器。这并不意味着你不能使用一些基于宏的系统来实现代码重用,但它仍然是一种破解。

+0

谢谢 - 将会阅读文章 – Vitaliy 2011-06-09 12:31:35

+0

我认为文章中描述的yacc解析器的问题与我的情况无关:L1可以是单独的语言,L2只是用一些关键字扩展L1,L1和L2没有冲突的规则和关键字的含义。我更感兴趣的是如何将一种语言的解析器(令牌和AST生产)用于多种fsy文件(更好的是如何分离)解析器(令牌和AST生产) – Vitaliy 2011-06-10 06:35:07

+0

即使您的问题不是病态,它与您的问题有关。没有设计成yacc的语法组合机制,因为它不能支持一般情况。 – Joh 2011-06-10 08:17:50