1

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

我已经完成了Lexing -> Parsing -> AST production -> L1 的 AST 处理过程,并用于此 F# 和FsLexFsYacc实用程序。

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

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

FsLex词法分析器:两种语言都可能通用,我只需要在 L1 词法分析器中包含几个 L2 的缺失关键字。但是,如果可以为 L1 和 L2 提供单独的词法分析器,并从 L2 词法分析器中引用 L1,那就太好了。

FsYacc 解析器:我不希望将所有 L1 解析器代码“复制-C”到 L2 中。 有没有一种方法可以在我的 L1 解析器中定义的 L2、令牌和 AST 数据生产中进行引用?

提前致谢

4

1 回答 1

2

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

于 2011-06-09T12:11:37.360 回答