是否可以使用为一种语言开发的FsYacc解析器作为其他语言的解析过程的一部分?

时间:2011-06-09 08:15:07

标签: parsing f# fsyacc

我正在为两种语言L1和L2实现解析和表达式评估。 重要的是L1可以作为单独的语言使用,也可以作为L2的一部分使用,而L2只包含几个关键字,在L1中不存在。

我已经完成 Lexing - >解析 - > AST生产 - >用于L1的AST处理进程,并使用 FsLex FsYacc 实用程序用于此F#。

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

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

FsLex Lexer :对于这两种语言都可能是常见的,我需要在L1 lexer中包含几个不存在的L2关键字。但是如果可以为L1和L2分别设置词法分析器,并且从L2词法分析器中引用L1,那就非常好。

FsYacc Parser :我不希望'copy-C'所有L1解析器代码都进入L2。 在L1解析器中定义的L2,令牌和AST数据生成中是否有引用方法?

提前致谢

1 个答案:

答案 0 :(得分:2)

这是一个有趣的article,它提到了语法构成的困难。简而言之,你不能使用类似yacc的解析器生成器做你想做的事情。这并不意味着你不能使用一些基于宏的系统来实现代码重用,但它仍然是一个黑客。