3

我偶然发现了以下 F77 yacc 语法:http: //yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y ?revision=1.3&view=markup 。

如何使用Happy从此文件中制作 Fortran 77 解析器?

为什么会有一些 C?/C++?那个 .y 文件中的代码?

更新:感谢您的回复!

一段时间以来,我一直在使用两种新方法:

  1. 从与标题为Parametric Fortran的论文捆绑的源代码包中提取和修改解析器,
  2. 在BNFC的帮助下从头开始编写语法。

我已经可以解析简单的代码摘录了。如果本世纪内出现可用的东西,我会让人们知道的^__^“呵呵。

P/S:想看看我是否可以自己收集足够的动力来启动一个自动差异化引擎的项目,以取代我们暂时依赖的仅二进制引擎。初始阶段的娱乐:我在看Love Shuffle!这是一部非常有趣的J-Drama!强烈推荐...

4

4 回答 4

2

C 是在读入语法时减少堆栈的语义操作。这些操作在 C 中,因为该定义旨在用于生成 C 源文件的 Bison/Yacc。

如果您想使用 Happy,请将 BNF 移植到 Happy 定义语法并在 Haskell 中编写您的语义。

然而,获得任何有用的东西只是冰山一角。

如果您还没有副本,请购买Dragon Book(编译器:Aho、Lam、Sethi、Ullman - Pearson 的原则、技术和工具)

于 2009-06-23T12:24:11.443 回答
2

为什么其他答案在一般意义上是正确的,因为您需要编写自己的操作来做任何有意义的事情,您链接到的 Yacc 定义实际上没有与语法规则相关的任何操作。它的作用是定义 yyerror 函数和一些用于根据令牌类型从 yylval 中提取值的代码。

如果你不知道 yyerror/yylval 是关于什么的,你应该阅读 bison/flex 教程。如果您对此更加认真,Dragon book 也是一个很好的资源。还有一些来自斯坦福大学关于网络上漂浮的编译器课程的优秀讲义,这些讲义都是基于这本书的。

于 2009-06-24T09:56:49.207 回答
1

您将需要一个 AST 来构建,它可以以与 Yacc 文件中的 C 片段等效的方式构建。

于 2009-06-23T16:49:48.193 回答
1

使用BNFC从头开始​​编写自己的语法!BNFC 创造了奇迹,你可以完全按照你的意愿进行解析。

于 2009-06-26T20:45:06.973 回答