我正在为两种语言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数据生成中是否有引用方法?
提前致谢
答案 0 :(得分:2)
这是一个有趣的article,它提到了语法构成的困难。简而言之,你不能使用类似yacc的解析器生成器做你想做的事情。这并不意味着你不能使用一些基于宏的系统来实现代码重用,但它仍然是一个黑客。