代码之家  ›  专栏  ›  技术社区  ›  Redwood

在Mac OS X 10.6上编译和执行莎士比亚编程语言翻译spl2c会导致警告/错误

  •  8
  • Redwood  · 技术社区  · 15 年前

    我想试验一下 Shakespeare programming language ,所以我从下载了它 here 并使用 cd spl-1.2.1 Make .

    汇编 spl2c 执行时出现几个警告:

    scanner.l:600: warning, rule cannot be matched
    <stdout>:5808: warning: ‘yyunput’ defined but not used
    

    然后当它试图编译所有的示例时,一切都乱套了:

    ../spl/bin/spl2c < fibonacci.spl > fibonacci.c
    Warning at line 19: equality expected
    Warning at line 28: equality expected
    Warning at line 30: comment expected
    Warning at line 30: comment expected
    Warning at line 30: comment expected
    Warning at line 30: comment expected
    Warning at line 32: comment expected
    Warning at line 32: comment expected
    Warning at line 32: comment expected
    Warning at line 32: comment expected
    Warning at line 34: comment expected
    Warning at line 34: comment expected
    Warning at line 34: comment expected
    Warning at line 34: comment expected
    Warning at line 36: comment expected
    Warning at line 36: comment expected
    Warning at line 37: comment expected
    Warning at line 37: comment expected
    Warning at line 37: comment expected
    Warning at line 37: colon expected
    Warning at line 40: equality expected
    Warning at line 51: comment expected
    Warning at line 51: comment expected
    Warning at line 51: comment expected
    Warning at line 51: comment expected
    Warning at line 51: comment expected
    Warning at line 51: colon expected
    Error at line 59: 'act [roman number]' or 'scene [roman number]' expected
    1 errors and 27 warnings found. No code output.
    

    有人能指点我正确的方向来解决这个问题吗?我最初的项目是学习SPL,而不是倾向于调试编译器(实际上我最终想编写自己的编译器,但现在我更愿意坚持我的初始项目)。

    我在跑步 OS X 10.6.2 , gcc version 4.2.1 (Apple Inc. build 5646) (dot 1) , flex 2.5.35 bison (GNU Bison) 2.3 .

    编辑:对于不需要goto的简单程序(例如hello.spl),您可以通过删除除第一个act i/scene i之外的所有act/scene行来解决问题。

    3 回复  |  直到 7 年前
        1
  •  23
  •   Stephen Kennedy annamataws    9 年前

    这是词法分析器中正则表达式的缺陷。

    I forked the language.

    I fixed the issue.

    I notified the original authors.

    Here's a release of the language that includes the fix for your enjoyment.

    There are still a few warnings 但他们似乎什么都没影响。 Let me know 如果你发现任何其他的功能问题,我会看看我能用它们做些什么。

    (罗菲尔——如果不是因为没人关心这个问题,这就是亡灵法。)

        2
  •  3
  •   rici    7 年前

    这个问题是由于在2.5.4和2.5.33版本之间引入了flex中的一个bug引起的;也就是说,从编写莎士比亚处理器到提出这个问题之间。这个错误涉及到在不区分大小写的正则表达式(例如 i{1,3} ,这是莎士比亚对罗马数字的flex规范的一部分);该错误的后果是丢失了大小写不敏感,因此 i{1,3} 像以前那样扩展 [iI]i?i? 而不是 [iI][iI]?[iI]? . 这意味着带有重复字符的大写罗马数字(这在莎士比亚的源代码中很常见)将无法正确识别。

    凯尔·卡特梅尔在马洛的变化中使用了regex中的大写字母,而不是小写字母,这就颠倒了这个问题,因此只有大写罗马数字才能可靠地工作。

    我把flex错误报告为 https://github.com/westes/flex/issues/193 . 如果有人在正式发布之前需要它的话,这是一个单行的flex补丁。

        3
  •  1
  •   epatel    15 年前

    第一个问题是 scanner.l:600: warning, rule cannot be matched 是因为这个词 rotten 已向文件添加两次 include/negative_adjective.wordlist 只需将其从那里移除,第一个警告将被移除。但这并不能解决剩下的问题。看看这里,如果我能修理更多的东西。