我在 Mac OS Maverick 中使用 flex 和 bison。我可以在 bash 中发送 bison 和 flex 命令,没有任何问题。但是当我尝试使用 shell 脚本发出命令时。我收到这个错误。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bison: invalid option --
Try `/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bison --help' for more information.
flex: can't open minus.l
clang: error: no such file or directory: 'minus.tab.c'
clang: error: no such file or directory: 'lex.yy.c'
: No such file or directoryut
脚本如下:
bison minus.y -d
flex minus.l
gcc minus.tab.c lex.yy.c -lfl -ly
答案1
您的脚本有 DOS 行结尾。bash
将回车符解释为常规字符。flex
实际上是在尝试打开minus.l\r
,而不是minus.l
,并注意最后一个奇怪的错误消息:
: No such file or directoryut
应该有一个路径名,后跟: No such file or directory
,但由于路径名以 结尾\r
,因此光标移回行首,并且错误消息将覆盖路径 ( ut
) 中除最后两个字符之外的所有字符。
使用 删除回车符dos2unix
。
答案2
您的脚本缺少标题
#!/bin/bash
bison minus.y -d
flex minus.l
gcc minus.tab.c lex.yy.c -lfl -ly
如果这不能解决问题,您可能需要查看行(结尾)(使用od -c
或)以确保文件中xxd
没有隐藏字符(例如 CR/ ^M
/ )。\r