【问题标题】:Generate Fortran 77 parser from a yacc grammar using Happy (Haskell)使用 Happy (Haskell) 从 yacc 语法生成 Fortran 77 解析器
【发布时间】:2009-06-23 11:54:59
【问题描述】:

我偶然发现了以下 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!强烈推荐...

【问题讨论】:

    标签: parsing haskell fortran grammar happy


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,我已经得到了这本书的副本!至于斯坦福的论文,我想等我有时间再看看吧^o^!!
      【解决方案3】:

      您需要一个 AST 来构建,它的构建方式与 Yacc 文件中的 C 片段相同。

      【讨论】:

      • 我认为构建 AST 的动作所使用的语言语义将严重影响它们的编写方式。我不建议将 C 中的逐字复制到 Haskell 中。这样做会导致效率低下和混乱。最好的方法是研究 AST/解析器/编译器的来龙去脉,然后直接将其应用到 Haskell 中,而无需过多关注 C 中现有的生产操作。
      • 感谢,正如我在更新中所说,我现在正在遵循您的 (dons & aiden) 建议。
      【解决方案4】:

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

      【讨论】:

      • 您的作品有任何公共资源吗?我想构建完全相同的东西,以便我可以使用一些 fortran 代码来工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多