9

我想尝试使用莎士比亚编程语言,所以我从这里下载了它并使用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.35bison (GNU Bison) 2.3

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

4

3 回答 3

23

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

我分叉了语言。

我解决了这个问题。

我通知了原作者。

这是包含修复程序的语言版本,供您欣赏。

仍然有一些警告,但它们似乎没有任何影响。如果您发现任何其他功能问题,请告诉我,我会看看我能用它们做些什么。

(Roffel - 如果不是因为没人关心这个问题,这将是死灵术。)

于 2010-12-11T18:35:10.263 回答
5

这个问题是由于 Flex 中在 2.5.4 和 2.5.33 之间的某个地方引入的错误造成的;也就是说,在编写莎士比亚处理器和提出这个问题之间。该错误涉及在不区分大小写的正则表达式中使用带有单字符参数的大括号重复运算符(例如i{1,3},这是罗马数字莎士比亚弹性规范的一部分);该错误的结果是丢失了不区分大小写,因此它i{1,3}被扩展为好像它[iI]i?i?不是[iI][iI]?[iI]?. 这意味着无法正确识别带有重复字符的大写罗马数字(这在莎士比亚源代码中很正常)。

Kyle Cartmell 对 Marlowe 的更改在正则表达式中使用大写字母而不是小写字母,这颠倒了问题,因此只有大写罗马数字才能可靠地工作。

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

于 2017-04-08T14:51:22.180 回答
1

第一个问题scanner.l:600: warning, rule cannot be matched是因为这个词rotten已经被添加到文件中两次,include/negative_adjective.wordlist只需从那里删除它,第一个警告就会被删除。但是,这并不能解决其余问题。如果我能解决更多问题,请看这里。

于 2009-12-22T21:09:41.203 回答